我已经想出如何设置VC ++来将代码编译成.lib文件而不是.exe文件,但是我无法将lib与我的其他.obj文件链接在一起。
以下是我如何设置库和应用程序文件夹的方法。 (我不确定这是不对的)
AppFolder
App.sln
App.ncb
*.h
*.cpp
Debug
*.obj
App.exe
和硬盘上的其他地方......
LibraryFolder
lib
Library.lib
include
LibrarySolutionFolder
Library.sln
Library.ncb
*.h
*.cpp
Debug
*.obj
Library.lib
我一直在#include我的应用程序的cpp文件中的库* .h文件,一切都编译好了。它只是在链接时我得到了所有.lib的列表 正在搜索的文件,即使我在VC ++目录中列出了Library.lib,它也不在那里。 我怎样才能将其链接起来? (我是否正确构建了库文件夹?)
答案 0 :(得分:10)
在项目属性上:
配置属性 - >链接器 - >输入 - >额外的依赖
将其添加到那里。
或者,在库的.h文件中,添加:
#pragma comment(lib, "Library")
这将自动为您完成。
答案 1 :(得分:3)
VC ++目录是链接期间要搜索的目录位置列表。它不是要链接的库列表。
您需要将lib文件添加到 项目链接器 设置的 附加依赖关系 字段。< / p>
答案 2 :(得分:1)
要链接到库,您可以:
如果您确定只使用VC ++,
#pragma comment(lib,"C:\\path\\to\\library.lib")`
(谢谢@Nils)
注意:将库解决方案文件夹放在“include”目录中似乎很奇怪:这些文件实际上是用于* .h(或其他#include
d文件)。
答案 3 :(得分:1)
从命令行:
cl / EHsc {objfiles} + / link / LIBPATH:LibraryFolder Library.lib
其中{objfiles} +表示一个或多个对象或cpp文件。
答案 4 :(得分:0)
如果包含头文件,VC不会简单地链接库。
您必须告诉链接器使用该库。理由很充分:您已经在库文件夹中拥有数千个库。如果MSVC每次链接你的程序时都必须搜索所有这些程序,那么它将不得不涉及几兆字节的数据。
这需要一段时间,因此默认情况下不会这样做。
对于VC,您还可以提示源中的链接器。为此,您可以在源代码中的某处添加以下行(lib的标题可能是一个好地方)。
#pragma comment(lib,"c:\\path_to_library\\libname.lib")
这不是平台独立,而是使用MSVC自动链接到项目的lib的最便捷方式。
另一种方法是简单地将链接器添加到项目设置中。可以在项目的链接器设置中找到相关信息。不要忘记将lib添加到发布和调试配置中。