建立控制台程序,静态链接库还是动态链接库,项目配置属性里改成对应的即可。
静态库编译之后会生成对应的.lib文件,在工程A中使用时,配置A的属性,
1、配置属性 == 》C/C++ ==》常规 附加的include 路径里,添加头文件所在的路径。
2、配置属性 == 》链接器 ==》常规 附加库目录里,添加.lib文件所在的路径。
3、配置属性 == 》链接器 ==》输入 附加依赖项目里,添加 .lib 文件的名称。
这里的路径可以使用相对路径也可以使用绝对路径,推荐使用相对路径。使用相对路径时,当前的目录 . 表示 .vcxproj 工程文件所在的路径(而不是解决方案的路径)。
在解决方案中看到的文件的组织结构只是一种逻辑上的结构,可以随时任意的修改,不影响编译。实际在磁盘上的物理存储结构才是最重要的。通过添加项添加进工程的文件,都会自动识别该文件相对于工程的位置并插入到 .vcxproj 工程配置文件里。
<ItemGroup>
<ClCompile Include="func\returnZero.cpp" />
<ClCompile Include="source.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="func\sayHello.h" />
</ItemGroup>
只是在 include 头文件时,正确的写入头文件相对工程的相对路径即可。
动态链接库的创建的不同之处在于,需要在所有函数的声明前边加上 __declspec(dllexport) ,动态链接库的创建也会产生.lib文件,这个文件比较小,只有几K ,叫导入库,只是一些符号信息,提供给编译器索引。总之,.lib都是编译时用到。
VC++ 对于动态链接库和静态链接库的处理是有差异的,见 Visual Studio 和 GCC 引用 dll 文件的区别
加入动态链接库,编译通过之后,要想运行,需要将动态链接库.dll 文件拷贝到A工程目录下边。
另外,debug 产生的动态链接库和静态链接库;只能给A工程在debug 状态下使用。也就是说,A工程在release状态下用的 静态链接库和动态链接库,需要提供对应的release版。
另外,使用动态链接库的程序允许 dll 中包含与该程序中相同名称的全局变量;而静态链接的则不允许。