Visual Studio 2005
我正在与boost库发布1_33_1进行链接。
我一直收到此链接错误。
libboost_thread-vc80-mt-sgd-1_33_1.lib(once.obj) :error LNK2001: unresolved external symbol "public: void __thiscall std::_String_base::_Xran(void)const " (?_Xran@_String_base@std@@QBEXXZ)
有人有任何建议吗?
非常感谢,
编辑======
使用这些开关重新编译boost库后:
C:\boost_1_42_0>bjam --build-dir=d:\boost_1_42 --build-type-complete --toolset=msvc-8.0 address-model=32 architecture=x86
我收到以下一些错误:
1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBCMTD.lib(typinfo.obj)
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: __wassert already defined in LIBCMTD.lib(wassert.obj)
有人有什么想法吗?
非常感谢,
答案 0 :(得分:1)
首先,如果构建32位,则不必明确设置地址模型和体系结构。您的通话也有误:--build-type-complete
应为--build-type=complete
。如果我没错,你的调用绝对构建所有的库,包括文件系统,正则表达式等。
显然你只需要boost :: thread,所以我建议你试试这个电话:
C:\boost_1_42_0>bjam --build-dir=d:\boost_1_42 --build-type=complete --toolset=msvc-8.0 --with-thread
但我不认为这会解决你的问题,但你可以尝试一下。
我的猜测是你在项目设置中以某种方式混合/ MD和/ MT。
请参阅以下链接:First,second
答案 1 :(得分:1)
可能发生的是您的项目链接到C ++运行时的静态调试版本,这导致静态调试提升线程库被链接,并且还链接到另一个动态链接到C ++运行时的静态库
sgd
中的libboost_thread-vc80-mt-sgd-1_33_1.lib
标记表示您链接的boost线程库是针对C ++运行时的静态调试版本构建的。