造轮子是一件风趣的事变,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完成静态库的搭建的细致内容,更多请关注ki4网别的相干文章!