链接错误:模糊的libboost*.lib vs boost*.lib

jav*_*red 10 c++ boost

我在我的项目中使用了boost.我从http://boost.teeks99.com/下载了预编译的二进制文件

链接时我收到这样的错误:

Error 18 error LNK2005: "public: void __cdecl boost::thread::join(void)" (?join@thread@boost@@QEAAXXZ) already defined in boost_thread-vc110-mt-1_52.lib(boost_thread-vc110-mt-1_52.dll) C:\Oleg\projects\MBClient\FastNativeAdapter\libboost_thread-vc110-mt-1_52.lib(thread.obj) FastNativeAdapter

为什么boost包含两个lib名字如此相似,它们之间的区别是什么?

  • libboost_thread-vc110-MT-1_52.lib
  • boost_thread-vc110-MT-1_52.lib

如何修复链接错误?

upd我自己编译了提升.我已将boost_1_53_0\stage\lib目录添加到链接器.该目录实际上包含"每个"文件的3个"副本",例如:

  • boost_atomic-vc110-MT-1_53.dll
  • boost_atomic-vc110-MT-1_53.lib
  • libboost_atomic-vc110-MT-1_53.lib

所以很清楚编译器声称的内容.不知怎的,它无法理解要使用哪个版本的lib文件.它可能与静态/ dinamic链接有关,但我仍然找不到解决方案.我确定我的问题非常普遍,所以我希望有人可以建议我该怎么做.

我试图从文件夹中删除所有"libboost*"文件,但后来我收到这样的错误: Error 15 error LNK1104: cannot open file 'libboost_date_time-vc110-mt-1_53.lib'

我试图从文件夹中删除所有"boost*lib"文件,但后来我收到了这样的错误: Error 15 error LNK1104: cannot open file 'boost_thread-vc110-mt-1_53.lib'

然后我复制boost_thread-vc110-mt-1_53.lib回来,我收到很多错误:

Error 16 error LNK2005: "public: virtual __cdecl boost::detail::thread_data_base::~thread_data_base(void)" (??1thread_data_base@detail@boost@@UEAA@XZ) already defined in boost_thread-vc110-mt-1_53.lib(boost_thread-vc110-mt-1_53.dll)

因此,当没有boost_thread-vc110-mt-1_53.lib编译器声称它丢失时,当boost_thread-vc110-mt-1_53.lib编译器声称"功能已经定义"时.Probaly以某种方式我同时使用dinamic和static链接或类似的东西?

upd2我已#define BOOST_ALL_DYN_LINK按照此处的建议取消注释,现在代码编译!我正在调查其他一切是否正常.但是我不明白为什么我应该取消#define BOOST_ALL_DYN_LINK评论,所以欢迎评论.

mah*_*mah 7

编辑:由于对帖子的编辑改变了情况,因此删除了初始语句.

基于http://www.boost.org/doc/libs/1_53_0/more/getting_started/unix-variants.html#library-naming(由Igor R.提供):

libboost_thread-vc110-mt-1_52.lib是一个静态库(不需要DLL)boost_thread-vc110-mt-1_52.lib是DLL的导入库

您只需要使用其中一个.


jav*_*red 0

我自己问我的问题。需要取消注释#define BOOST_ALL_DYN_LINK(请参阅说明)