我曾经使用过几个Visual C++编译器(VC97,VC2005,VC2008),我还没有真正找到一种向我的构建添加外部库的清晰方法.我来自Java背景,在Java库中是一切!
我理解在Linux机器上编译开源项目时,除了那些.so文件之外,似乎需要包含库的所有源代码.
我也听说过.lib静态库和.dll动态库,但我仍然不完全确定如何将它们添加到构建中并使它们工作.怎么会这样呢?
C++中的库也被认为是有用的,但是它们集成它们的方式与Java不同,因为编译器只需要查看库的接口,该接口通常在头文件中声明.在Java中,编译器必须检查实际的库,因为Java在外部可见的头文件和提供实现的生成的目标代码之间没有这种区别.
您通常做的是单独构建库,一次,并将生成的lib/dll文件和头文件放入需要库可以访问的项目的位置.一个常见的习惯用法是将头文件放入include
静态库中lib
,将动态库放入已bin
编译库的子目录中.
您发现大多数C++库以源代码形式提供而不是以预编译形式提供的原因是每个C++编译器都有一定的自由来如何破坏符号名称等,并且生成的对象代码不能跨编译器移植,让单独的操作系统.因此,运送已编译的代码对于许多应用程序来说没有意义.您偶尔会在Windows上使用闭源C++库找到它(C库是完全不同的事情),但供应商必须为每种构建类型提供编译版本(Release,Debug,32 bit,64比特等)和目标编译器(各种版本的Visual Studio需要不同的二进制文件,然后是Borland和其他一些编译器),它很快成为支持的噩梦......
当您使用库并将其构建为Windows上的动态库(即DLL)时,编译器/链接器通常会为其生成一个静态"导入"库(同名,只有.lib扩展名).将项目与动态库链接时,将.lib文件指定为库依赖项.将应用程序与所述导入库链接允许链接器记录对.dll文件的依赖性以及它应该期望库提供的符号.
让它们工作 - 就你的程序在Windows上找到它们而言 - 通常要求.dll文件与可执行文件位于同一目录中,或者通过'PATH'环境变量及其在Visual C++中的等效文件可访问.
好.通常,您不希望手动加载动态库,但如果您这样做,请查看LoadLibrary.然后你必须调用其他函数来获取函数指针地址等等.通常它是如何工作的,甚至.dll文件也有.lib文件.所以当需要它们时,它们只是自动加载.
如何指定.lib文件/静态库位于Properties/Linker/Input-> Additional Dependencies下.在gui.
如果你正在编写脚本...好吧.您只需在链接时指定命令行上的.lib文件.
我想你可能会问如何在IDE中为项目/解决方案添加lib的机制......
在2003年,2005年和2008年,它类似于:
从解决方案资源管理器 - 右键单击项目选择属性(通常是最后一个)我通常选择顶部的所有配置...链接器输入
其他依赖关系在那里
我希望我能为此做一个屏幕截图.
在VC6中,它与我不同,因为这完全来自记忆
项目设置或属性,然后转到链接器选项卡,找到可以添加库的位置.
请原谅这篇文章的偶然性质.我想这就是你想要的.