链接错误:ambiguous libboost*.Lib vs boost*. Lib
linking error: ambiguous libboost*.lib vs boost*.lib
我在我的项目中使用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:OlegprojectsMBClientFastNativeAdapterlibboost_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_0stagelib
目录链接器。该目录实际上包含"每个"文件的3个"副本",例如:
- boost_atomic-vc110-mt-1_53.dll
- boost_atomic-vc110-mt-1_53.lib
- libboost_atomic-vc110-mt-1_53.lib
所以很清楚编译器在说什么。不知何故,它无法理解使用哪个版本的lib文件。可能与静态/动态链接有关,但我仍然找不到解决方案。我相信我的问题很普遍,所以我希望有人能建议我怎么做。
我试着从文件夹中删除所有"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
编译器声称"函数已经定义"时。也许我同时使用了动态和静态链接之类的?
upd2我已经取消了#define BOOST_ALL_DYN_LINK
的注释,现在代码编译!我正在调查其他情况。但是我不明白为什么我要取消#define BOOST_ALL_DYN_LINK
的注释,所以欢迎评论
Edit:由于对帖子的编辑改变了情况,因此删除了初始语句。
基于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
的导入库。你只需要使用其中一个
如果遇到error LNK1104: cannot open file 'libboost_date_time-*.lib'
错误,可以尝试另一个想法/解决方案:
在我们的项目中,包含boost/date_time.hpp
文件。我们在项目设置中定义常量BOOST_ALL_NO_LIB
而不是BOOST_ALL_DYN_LINK,以告诉boost不要自动选择要链接的库。有关此选项的更多信息,请参阅Boost文档。
所以你可以在项目属性-> C/c++ ->预处理器->预处理器定义中添加BOOST_ALL_NO_LIB
,并检查这个链接器错误是否消失。
我认为你首先需要纠正你的问题。你的意思是(我猜你已经知道DLL
和LIB
之间的区别了)
- libboost_thread-vc110-mt-1_52.lib
- boost_thread-vc110-mt-1_52。 dll
或
- libboost_thread-vc110-mt-1_52.lib
- boost_thread-vc110-mt-1_52。自由
无论如何,问题似乎是你混合静态(libboost_thread-vc110-mt-1_52.lib
)和共享(boost_thread-vc110-mt-1_52.lib
) boost库。但是没有工作环境和平台的细节,我无法找到一个精确的解决方案。如果您在Visual Studio
中工作,那么您可以转到right click on project file
> properties
> linker
> input
> ignore specific library
并添加libboost_thread-vc110-mt-1_52.lib
并尝试。
问我自己的问题。需要取消#define BOOST_ALL_DYN_LINK(参考描述)
- Visual Studio C++ & Boost Lib:仅当存在BOOST_FOREACH时才无法找到函数定义
- 可以在linux程序中使用msvc在windows上构建的boost lib吗
- Boost.Python 和错误LNK1104:无法打开文件'boost_python-vc100-mt-gd-1_55.lib'
- C 算法/Boost Lib是否具有radix排序
- 为什么C++Boost发行版有“.dll”和“.lib”文件
- Boost can not find lib
- 带有boost lib的路径
- 令人费解的Boost.Python 1.54(调试版本)对Windows上的Python27.lib的依赖关系
- dijkstra_shortest_paths Boost Graph Lib 1.57.0 fails
- 错误 LNK1104: 无法打开文件 '...\...\PCL 1.6.0\3rdParty\Boost\lib.obj'
- 在boost图lib中,如何在不迭代顶点的所有外边缘的情况下获得该顶点的特定外边缘
- VS2013 LNK1104要求不同版本的外部lib(boost)
- 为什么C++ Boost Lib 不能使用?
- 使用boost-lib的更高精度浮点(高于16位)
- Boost, Lib C++ and Xcode
- 使用odeint时出现Boost lib错误
- 如何在 Linux 上使用 Boost Wave Lib
- 减少我的boost lib文件夹
- Boost lib 缺少 'libboost_date_time-vc90-mt-gd-1_44.lib 文件。如何使用 bjam 仅构建此库文件?
- 在basic_socket.hpp文件中使用lib boost asio 1.47.0时出错