Ошибка LNK2005 при попытке связать с Boost 1.53

Я в настоящее время пытаюсь связать против повышения 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

кажется, что все библиотеки поддержки пытаются импортировать функции std :: string из MSVCP90D.dll

__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, вставляя код std :: string, так что boost и моя программа имеют одно и то же объявление в objs, и связь может быть достигнута.
Либо моя программа должна импортировать код std :: string из MSVCP90D.dll так же, как это делает boost.

Проблема в том, что я не знаю, как запросить boost для компиляции без импорта кода std :: string.
И я не знаю, как заставить мою программу импортировать std :: string из MSVCP90D.dll, у кого-нибудь есть идея?

Должен сказать, что моя программа явно скомпилирована с параметром / MDd. Boost также должен быть скомпилирован с этой опцией со строкой во время выполнения линии связи = общий

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]