链接与boost未解决的外部链接错误

时间:2010-03-10 08:53:28

标签: boost

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)

有人有什么想法吗?

非常感谢,

2 个答案:

答案 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。
请参阅以下链接:Firstsecond

答案 1 :(得分:1)

可能发生的是您的项目链接到C ++运行时的静态调试版本,这导致静态调试提升线程库被链接,并且还链接到另一个动态链接到C ++运行时的静态库


sgd中的libboost_thread-vc80-mt-sgd-1_33_1.lib标记表示您链接的boost线程库是针对C ++运行时的静态调试版本构建的。