手机版

用Visual Studio 2017编写静态库

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

制造轮子是一件有趣的事情。VS是一个强大的工具,可以胜任超大型项目,但说实话,配置不那么大的项目就没那么友好了(其他在线教程一点都不友好,Orz)。以下是构建简单静态库的正确姿势。(顺便教点道理。

很多人搞不懂项目和解决方案的区别。在VS中,Project是基本的执行单元,一个Solution可以包含多个Project——。我们的静态库将包含几个(。lib)项目和一个(。测试项目。选择Win32控制台应用程序控制台作为解决方案。

类型为静态库的静态库,并且删除了预编译头选项。

添加头文件和源文件。

源文件。cpp是相同的,然后它应该是这样的:

(注意,仅添加。没有的文件。cpp不可接受。这样的项目无法编译。lib库,然后当您测试它时,会出现诸如“XXX . lib”:无法打开指定文件之类的错误。别问我怎么认识Orz的。)

(回过头来看无法打开指定文件的另一个原因是,的生成位置。lib错了。请在此查看解决方案资源管理器-属性属性页。

-输出方向输出目录

默认的是对的。在\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可以有多个项目,所有项目都是执行单元(我稍后会讲到如何调用执行单元,这是我自己的概念)),并在Solution Explorer中向Solution添加新项目:

选择控制台并像以前一样删除预编译头。现在我们有了一个包含两个项目的解决方案:

编写测试代码

//test . CPP # include ' stdafx . h ' # include '.\ MathLib \ MathLib . h ' # include iostreamint main(){ STD :3360 cout add(1,2)STD : endl;返回0;}现在,您需要为Test添加对MathLib的引用。这一步的实际效果是在指导IDE用cl编译器命令行编译时添加正确的链接选项(CSAPP有非常启发性的解释。在源文件#包含头文件之后,它只引入了一堆没有被重新定位到链接器的符号。它需要在库文件中找到这些符号(如果是静态库,Linux就是。一个文件,Windows是。lib)来完成重定位),并且很好地找到这些库。如下图所示,在解决方案资源管理器中添加引用

VS仔细列出了解决方案中的项目作为替代,所以只需选择它。

此时,测试的引用中有MathLib项目。

接下来添加cl编译器的include路径,也就是如何在预编译期找到MathLib.h完成符号的引入。在Test Properties属性页-c-general-additional include direct Aries中,额外的include路径是stdlib.h目录中其他(自定义)头文件包含的目录,cl会去这些地方找MathLib.h选择添加目录MyStaticLibrary\MathLib。

这时,一切都准备好了,F5的组建和运营结果报告了这样一个错误:

Win32应用程序说。lib无效,无法运行。是的,我也不想运行它,但是VS如何知道解决方案中的许多项目中应该运行哪个?(想想之前的执行单元理解了什么,每个Project编译的结果都被认为是可执行的。)第一个添加的Project是MathLib,所以VS默认运行它的输出,所以是错误的。尝试引导VS运行Test (Test.exe)的输出,解决方案资源管理器-神秘库属性属性页:

将单个启动项目设置为测试,确定。

构建运行!

祝大家车轮快乐!

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:用Visual Studio 2017编写静态库是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。