为什么Boost要寻找libboost_*.lib而不是boost_*.lib?

7
我使用标记布局编译了boost库,因此我有形如boost_program_options-mt.lib的库文件。我猜测问题出在boost_auto_link或者其他方面。我定义了预处理器宏BOOST_AUTO_LINK_TAGGED,但是仍然出现错误,说Visual Studio正在寻找libboost版本并且无法打开文件。
Error   LNK1104 cannot open file 'libboost_program_options-mt.lib'  

我应该如何修复这个问题,以便能够正确地链接到库?

更新:出现了一个错误,说我的计算机上缺少boost_system-mt.dll。这很奇怪,因为我没有链接到动态库,也没有在我的附加库目录中包含动态库。


看起来它正在尝试链接静态库,而不是动态库。 - Dan Mašek
@DanMašek 我想链接我的库目录中的静态库,但我的所有静态库都是由b2编译为boost_program_options-mt.lib。如果这不是标准,那么为什么b2会以这种方式编译它们呢?我所有的静态和动态库都以boost_开头,而不是libboost_。 - user3096803
1
这似乎不太可能。根据文档:“在Windows上,只有普通的静态库使用lib前缀;导入库和DLL不使用。” …“此约定区分了Boost库的静态版本和相同配置的Boost DLL的导入库,否则它们将具有相同的名称。”你是如何构建你的boost以达到这种状态的(实际上,你如何区分它们)? - Dan Mašek
在 C++ --> 代码生成设置中,你看到 MT 或 MD 开关了吗?也就是说,你是将应用程序与静态 CRT 还是动态 CRT 链接? - Igor R.
1个回答

1

根据这里提到的boost文档:

BOOST_ALL_NO_LIB
告诉配置系统不要自动选择链接哪些库。通常,如果编译器支持 #pragma lib,则包含该库头文件后,正确的库构建变体将自动被选择并链接。此宏关闭了该功能。

因此,我认为如果您在预处理器定义中定义BOOST_ALL_NO_LIB,然后将库的路径添加到库路径列表中,就可以解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接