题
我已经弄清楚如何设置 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
我已经从我的应用程序的 cpp 文件中 #include 库 *.h 文件,并且一切都编译得很好。就在它链接时,我将获得正在搜索的所有.lib文件的列表,即使我在vc ++目录中列出了它,也不在那里。我怎样才能得到这个链接?(我是否正确构建了库文件夹?)
解决方案
在项目属性上:
配置属性 - >链接器 - >输入 - >额外的依赖
将其添加到那里。
或者,在库的.h文件中,添加:
#pragma comment(lib, "Library")
这将自动为您完成。
其他提示
VC ++目录是链接期间要搜索的目录位置列表。它不是要链接的库列表。
您需要将lib文件添加到 项目链接器 设置的 其他相关性 字段。
要链接到库,您可以:
- 列在项目 - >属性...->链接器,输入 - >附加依赖项中(VC ++目录仅可让您仅使用.lib名称而不是完整路径),
- 将库项目添加到您的应用程序中。解决方案(在解决方案上,右键单击 -> 添加 -> 现有项目...),然后使用项目 -> 项目依赖项...,然后检查您的库项目(确保在下拉列表中选择应用程序项目)。如果您要编辑这两个项目,这可能是最好的方法,因为如果库在构建应用程序之前发生了更改,VC++ 将重建库。
如果你确定你只会使用 VC++,
#pragma comment(lib,"C:\\path\\to\\library.lib")`
(谢谢@尼尔斯)
注意:将库解决方案文件夹放在“include”目录中似乎很奇怪:其真正用于 *.h (或其他 #include
d 文件)。
从命令行:
cl / EHsc {objfiles} + / link / LIBPATH:LibraryFolder Library.lib
其中{objfiles} +表示一个或多个对象或cpp文件。
如果包含头文件,VC不会简单地链接库。
您必须告诉链接器使用该库。理由很充分:您已经在库文件夹中拥有数千个库。如果MSVC每次链接你的程序时都必须搜索所有这些程序,那么它将不得不涉及几兆字节的数据。
这需要一段时间,因此默认情况下不会这样做。
对于VC,您还可以提示源中的链接器。为此,您可以在源代码中的某处添加以下行(lib的标题可能是一个好地方)。
#pragma comment(lib,"c:\\path_to_library\\libname.lib")
这不是平台独立,而是使用MSVC自动链接到项目的lib的最便捷方式。
另一种方法是简单地将链接器添加到项目设置中。可以在项目的链接器设置中找到相关信息。不要忘记将lib添加到发布和调试配置中。