c++ - 链接错误 : ambiguous libboost*. lib 与 boost*.lib

标签 c++ boost

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

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

错误 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。我已将 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 文件。它可能与静态/动态链接有关,但我仍然找不到解决方案。我确定我的问题很常见,所以我希望有人可以建议我该怎么做。

我试图从文件夹中删除所有“libboost*”文件,但随后我收到这样的错误: 错误 15 错误 LNK1104:无法打开文件“libboost_date_time-vc110-mt-1_53.lib”

我试图从文件夹中删除所有“boost*lib”文件,但随后我收到这样的错误: 错误 15 错误 LNK1104:无法打开文件“boost_thread-vc110-mt-1_53.lib”

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

错误 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 编译器时声称“功能已经定义”。可能不知何故我确实同时使用动态和静态链接或类似的东西?

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

最佳答案

编辑:由于对帖子的编辑改变了情况,因此删除了初始声明。

基于 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 的导入库

您只需要使用其中一个。

关于c++ - 链接错误 : ambiguous libboost*. lib 与 boost*.lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16056461/

相关文章:

c++ - CUDA 和类

c++ - 阻止连接到 boost 信号的所有连接

c++ - 在编译时指定静态和动态大小

c++ - 使用 boost spirit qi 解析器解析枚举

c++ - 字段 'buffer_' 的类型不完整 'boost::array<char , 4096ul>'

c++ - 为什么显示nan?

c++ - 队列(多个生产者和消费者)的并发访问问题 - C++,Boost

c++ - 如何使用 boost::flyweight 作为 GOF 模式?

c++ - 使用同一标志编译的同一程序读取文本文件在不同系统上会得到不同的结果

c# - SHLoadIndirectString 的返回值是错误代码