首页 后端开发 C#.Net教程 VS2017完成静态库的搭建

VS2017完成静态库的搭建

May 12, 2017 am 10:13 AM
studio visual

这篇文章主要为大家详细介绍了Visual Studio2017写静态库的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

造轮子是一件有趣的事情,VS是一个强大的工具,能胜任超大规模的工程,但是讲真,对不那么大的项目配置起来不是那么友好(网上的其他教程也一点都不友好Orz)。这里就展示一下构建一个简单的静态库的正确姿势。(顺便教一点道理

创建解决方案——许多人搞不清工程/项目Project和解决方案Solution的区别,在VS中,Project是基本的执行单元,一个Solution可以包含多个Project——我们的静态库就将会包含几个(.lib)Project和一个(.exe)Project用作测试。解决方案选win32 Console Application控制台。

类型选Static Library静态库,去掉Precompiled Header预编译头选项。

添加头文件和源文件。

源文件.cpp同理,之后应该是这个样子:

(注意,只添加.h文件而没有.cpp是不行的,这样一个工程编译不出来.lib库,之后你测试的时候就会出现" "xxx.lib": cannot open file specified"之类的报错别问我怎么知道的Orz)

(另一种回头cannot open file specified的原因是.lib生成的位置不对,在这里看Solution Explorer->Properties属性

->Output Direction输出目录

默认那个是对的在\Debug目录下,谁知道怎么会错)

然后就可以写代码了:

//  MathLib.h
#pragma once
int add(int x, int y);
//  MathLib.cpp
#include "MathLib.h"
int add(int x, int y) { return x + y; }
登录后复制

然后你需要一个Project来测试(回想开头说的,一个Solution可以有多个Project,它们都是执行单位(一会会再讲到怎么叫执行单位这是我自己造的概念)),在Solution Explorer里面为Solution加入新工程:

选控制台,把预编译头去掉和之前一样,现在我们得到了一个含有俩Projects的Solution了:

编写一段测试代码

//  Test.cpp

#include "stdafx.h"
#include "..\MathLib\MathLib.h"
#include <iostream>

int main()
{
  std::cout << add(1, 2) << std::endl;
  return 0;
}
登录后复制

现在需要为Test添加MathLib的引用,这一步实际的作用是,在引导IDE用cl编译器命令行编译的时候,加入正确的链接选项(CSAPP有非常inspiring的讲解,源文件#include了头文件以后只是为链接器介绍了一堆未重定位的符号,它需要在库文件(静态库的话Linux是.a文件Windows是.lib)里找这些符号完成重定位),找到这些库很重要。在Solution Explorer里面Add Reference如图

VS很贴心地把Solution里的Projects列进了备选项,选中即可。

此时Test的Reference里就有MathLib工程了。

下一步,为cl编译器添加include路径,也就是说,预编译期应该怎么找MathLib.h以完成符号的引入。在Test Properties属性页->C++->General->Additional Include Directaries附加包含路径,就是额外于标准库头文件目录的其他(自定义)头文件包含的目录,cl要去这些地方找MathLib.h。选择添加MyStaticLibrary\MathLib这个目录OK。

这个时候万事俱备,F5组建运行结果报了这么个错:

说.lib不是有效的win32应用不能运行。对呀我本来也没要运行它呀,可是VS怎么知道Solution里面这么多Projects应该运行哪一个?(想想之前的执行单元理解到是什么意思了吧,每个Project编译的结果都认为可执行)第一个添加的Project是MathLib所以VS默认去运行它的输出所以错了。想办法引导VS去运行Test的输出(Test.exe),Solution Explorer->MyStaticLibrary Properties属性页:

设单启动工程为Test,OK。

【相关推荐】

1. ASP免费视频教程

2. ASP教程

3. 李炎恢ASP基础视频教程

以上是VS2017完成静态库的搭建的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Windows 11 是否提供对 VB6 应用程序的支持? Windows 11 是否提供对 VB6 应用程序的支持? May 30, 2023 am 08:31 AM

Windows11引入了更多macOS风格的UI元素。您将获得重新设计的任务栏,开始菜单位于中心。是的,您可以更改它的位置,但默认情况下,它将放置在中心。控制中心还进行了一些设计调整。在下一次更新中,对Android应用程序的支持也将与重新设计的记事本和媒体播放器一起提供。尽管所有这些功能都使Windows11比Windows10有了不错的升级,但用户的脑海中正在酝酿某些疑虑。有一部分用户和开发人员担心Windows11是否会支持遗留应用程序和技术,无论是否落后。由于V

如何修复 VCRUNTIME140.dll 在 Windows 上丢失错误 如何修复 VCRUNTIME140.dll 在 Windows 上丢失错误 May 04, 2023 am 08:04 AM

VCRUNTIME140.dllismissing错误是您在Windows上的VisualC++Redistributable文件存在问题。您可以使用本教程解决问题。Windows应用程序和软件需要DLL文件才能运行——没有它们,它们可能会完全停止工作。例如,如果您看到VCRUNTIME140.dllismissing错误,这表明您的PC缺少此文件,从而阻止应用程序启动。这可能是由于应用程序安装不成功。它甚至可以在运行Windows更新后出现。值得庆幸的是,您可以很容易

4 修复 CONCRT140.dll 未找到错误的方法 4 修复 CONCRT140.dll 未找到错误的方法 Apr 25, 2023 am 09:22 AM

如此多的用户报告说,每当他们尝试运行应用程序时,它都会抛出一条错误消息,指出代码执行无法继续,因为未找到CONCRT140.dll。在打开Adob​​e应用程序、Halo、ForzaHorizo​​n5等时,您可能会遇到找不到CONCRT140.dll。因此,这不是特定于某个应用程序的问题。如果没有安装正确的DLL,应用程序将无法正常工作,因为它们的代码依赖于这些库中编写的代码。在本文中,我们将了解CONCRT140.dll是什么以及它丢失的原因,以及我们如何下载它并修复错误。什么是

修复:Microsoft Visual C++ 2015 Redistributable Setup Failed 错误 0x80240017 修复:Microsoft Visual C++ 2015 Redistributable Setup Failed 错误 0x80240017 Apr 18, 2023 pm 01:07 PM

MicrosoftVisualC++已成为运行大多数常见应用程序所需的Windows操作系统的组成部分。现在,一些用户最近抱怨他们在尝试安装VisualC++RedistributablePackagesfor2015或MicrosoftVisualStudioRedistributablePackagesfor2013时遇到的问题。根据这些用户的说法,安装程序中途停止并显示“0x80240017-未指定错误”.这次失败的背后可能有很多原因。因此,不要在此

android studio如何实现上传图片到java服务器 android studio如何实现上传图片到java服务器 Apr 28, 2023 pm 09:07 PM

1.build.gradle配置(增加)dependencies{implementation'com.squareup.okhttp3:okhttp:4.9.0'implementation'org.conscrypt:conscrypt-android:2.5.1'}2.AndroidManifest.xml配置权限在application里面添加android:usesCleartextTraffic="true&q

Visual Studio 2022 for Mac 17.0 附带原生 macOS UI 和 Apple Silicon 支持 Visual Studio 2022 for Mac 17.0 附带原生 macOS UI 和 Apple Silicon 支持 Apr 15, 2023 am 08:04 AM

微软 已宣布Visual Studio 2022 for Mac 17.0的一般版本。它带来了巨大的变化,包括原生 macOS UI 和对 Apple Silicon 处理器的支持。据该公司称,它还发布了一个新的预览版,您可以与此版本并排安装。在旧版本的 Visual Studio for Mac 中,Microsoft使用了各种 UI 技术,这让事情看起来格格不入。此更新使用

微软发布 Visual Studio 2022 17.3,这里是亮点 微软发布 Visual Studio 2022 17.3,这里是亮点 Apr 28, 2023 am 10:28 AM

微软发布了VisualStudio202217.3。此更新带来了对.NET多平台应用程序UI(.NETMAUI)的支持、为MicrosoftTeams开发应用程序的能力、C++改进、Azure容器应用程序以及改进的LiveUnitTesting。您可以通过打开VisualStudio中的帮助>新增功能来查看新功能的完整列表。此更新中的主要功能是.NETMAUI已从预览支持中毕业,现在可在Windows上的VisualStudio2022

Android Studio无法执行Java类的main方法怎么解决 Android Studio无法执行Java类的main方法怎么解决 May 17, 2023 pm 04:43 PM

环境androidstudio版本:3.6.1gradle版本:5.6.4gradle插件版本:3.6.1错误提示11:41:35PM:Executingtask'TxtUtil.main()'...Executingtasks:[TxtUtil.main()]inproject/Users/tinytongtong/Documents/workspace/as/self/BlogDemoFAILURE:Buildfailedwithanexception.*Wh

See all articles