2010-03-10 101 views
0

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 " ([email protected][email protected]@@QBEXXZ) 

有没有人有任何建议?

C:\boost_1_42_0>bjam --build-dir=d:\boost_1_42 --build-type-complete --toolset=msvc-8.0 address-model=32 architecture=x86 

我得到一些下列错误:

非常感谢,

编辑======

使用这些开关重新编译Boost库后

1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in LIBCMTD.lib(typinfo.obj) 
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: __wassert already defined in LIBCMTD.lib(wassert.obj) 

任何人有任何想法?

非常感谢,

+0

您的项目是32位还是64位? – 2010-03-10 08:56:07

+0

我的项目是32位。谢谢 – ant2009 2010-03-10 09:28:08

+0

只是一个猜测,因为我曾经想将32位升级库链接到一个64位项目,它不工作,必须用64位编译该升级库。但是,也许你的升压库是用64位构建的... – 2010-03-10 09:31:45

回答

1

你不必设置地址模式,并明确在构建32位架构的第一。您的通话也有错误:--build-type-complete应该是--build-type=complete。如果我没看错你的电话建立绝对的所有库,包括文件系统,正则表达式等
很明显,你只需要提高::线程,所以我建议大家尽量将此号召:

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

什么是可能发生的事情是,你的项目被链接到C++运行时的静态调试版本,这将导致静态调试升压线程库进行链接,也链接到另一个动态链接到C++运行库的静态库。


sgd标签在libboost_thread-vc80-mt-sgd-1_33_1.lib意味着你与建对C++运行时的静态调试版本链接升压线程库。

相关问题