尝试链接Boost 1.53时出现LNK2005错误

时间:2013-03-30 19:19:02

标签: c++ boost linker-errors lnk2005

我目前正在尝试与boost lib链接

libboost_regex-vc90-mt-gd-1_53.lib

是从此命令行

创建的
b2^
 --stagedir=%BOOST_OUTPUT_DIR%^
 --build-dir=%BOOST_BUILD_DIR%^
 toolset=msvc-9.0^
 link=static^
 variant=release,debug^
 threading=multi^
 runtime-link=shared^
 stage

但我得到以下链接错误(其中一个):

msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) déjà défini(e) dans TrailerContest.Reflection.obj

我增加了链接器的详细程度以了解有关此错误的更多信息,这是我得到的:

Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib :
1>      "__declspec(dllimport) public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (__imp_??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) found
1>        Referenced in libboost_date_time-vc90-mt-gd-1_53.lib(greg_month.obj)
1>        Referenced in libboost_random-vc90-mt-gd-1_53.lib(random_device.obj)
1>        Referenced in libboost_thread-vc90-mt-gd-1_53.lib(thread.obj)
1>        Referenced in libboost_regex-vc90-mt-gd-1_53.lib(instances.obj)
1>        Referenced in libboost_regex-vc90-mt-gd-1_53.lib(regex.obj)
1>        Referenced in libboost_regex-vc90-mt-gd-1_53.lib(w32_regex_traits.obj)
1>        Referenced in libboost_system-vc90-mt-gd-1_53.lib(error_code.obj)
1>        Loaded msvcprtd.lib(MSVCP90D.dll)
1>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) already defined in TrailerContest.Reflection.obj

似乎所有提升库都试图从MSVCP90D.dll导入std :: string函数

__imp_??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ

虽然我自己的程序似乎嵌入了std :: string代码,因此尝试在内部进行链接。

      ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ

我想我在这里有两个选择,要么我使用boost embed std :: string代码,所以boost和我的程序在objs和链接中都有相同的声明可以实现。 我的程序必须以与boost相同的方式从MSVCP90D.dll导入std :: string代码。

问题是我不知道如何在不导入std :: string代码的情况下请求boost编译。 我不知道如何强制我的程序从MSVCP90D.dll导入std :: string,任何人都有想法?

我必须说我的程序显然是使用/ MDd选项编译的。还应使用此选项使用 runtime-link = shared

行编译Boost

0 个答案:

没有答案