Попытка связать ветку Boost 1.52

Я пытаюсь скомпилировать свою программу, но она вообще не связывается. Я указал путь к файлам boost lib, и компоновщик все еще жалуется. Вот ошибка связывания, которую я получил:

1>Edproj.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAABVerror_category@12@XZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAABVerror_category@12@XZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall boost::detail::thread_data_base::~thread_data_base(void)" (??1thread_data_base@detail@boost@@UAE@XZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexception@std@@@Z)
1>Edproj.obj : error LNK2001: unresolved external symbol "public: void __thiscall boost::thread::detach(void)" (?detach@thread@boost@@QAEXXZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "public: void __thiscall boost::thread::join(void)" (?join@thread@boost@@QAEXXZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "private: void __thiscall boost::thread::start_thread(void)" (?start_thread@thread@boost@@AAEXXZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "bool __cdecl boost::this_thread::interruptible_wait(void *,struct boost::detail::timeout)" (?interruptible_wait@this_thread@boost@@YA_NPAXUtimeout@detail@2@@Z)

BOOST_LIB_DIAGNOSTIC возвращает

1>  Linking to lib file: libboost_thread-vc100-mt-s-1_52.lib
1>  Linking to lib file: libboost_date_time-vc100-mt-s-1_52.lib
1>  Linking to lib file: libboost_system-vc100-mt-s-1_52.lib
1>  Linking to lib file: libboost_chrono-vc100-mt-s-1_52.lib

Больше информации:

Я использую 64-битную Windows 8 Pro, и я скомпилировал ускорение со следующей опцией

bjam --build-type=complete --toolset=msvc10.0 address-model=64 architecture=x86 variant=debug,release threading=multi link=static runtime-link=static

Может кто подскажет, что не так?

Обновлять:

После перехода на boost 1.51 он избавился от 7 из 8 ошибок компоновщика, но эта все еще сохраняется.

error LNK2001: unresolved external symbol "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexception@std@@@Z)

Я не понимаю, что здесь происходит. Это из 32-битного установщика boostpro. Это не могло иметь никакого отношения к моему исходному файлу, верно?

Обновлять :

Хорошо, я решил эту проблему для boost 1.51. Оказывается, на страницах свойств >> C / C ++ >> Генерация кода >> Включить исключения C ++ был отключен для меня.

В ПОРЯДКЕ. Я попытаюсь увидеть, решат ли те же настройки проблему для boost 1.52. Буду обновлять позже.


person Xavier R X Tan    schedule 03.02.2013    source источник
comment
Не могу вам сильно помочь, но я использовал предварительные сборки от boost-pro, это предварительно созданный пакет повышения с установщиком   -  person Harald Scheirich    schedule 03.02.2013
comment
Да, я сейчас пытаюсь получить сборку 1_51 через boost pro, чтобы посмотреть, смогу ли я заставить ее работать.   -  person Xavier R X Tan    schedule 03.02.2013
comment
Хорошая уловка при включении исключений. В моем случае это сработало.   -  person Matt Munson    schedule 12.06.2015


Ответы (4)


Раньше у меня была такая же проблема: я создаю boost lib с параметрами по умолчанию, которые напрямую запускают bootstrap.bat.

если вы используете boost :: system в своем проекте, вам следует использовать и назначить x86 или x64 версию boost :: system lib.

вы можете перекомпилировать boost lib с помощью этой летучей мыши, сохранить их для ускорения корневой папки и запустить ее в окнах CMD (не щелкайте дважды!):

call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86

cd boost_1_60_0
call bootstrap.bat

rem Most libraries can be static libs
b2 -j8 toolset=msvc-14.0 address-model=64 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/x64
b2 -j8 toolset=msvc-14.0 address-model=32 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/win32

pause

подробнее вы можете прочитать в этой статье: https://studiofreya.com/2015/12/19/how-to-build-boost-1-60-with-visual-studio-2015/

person Protoss    schedule 17.04.2016

Мне кажется, спасибо, что автоматическая привязка не выполняется правильно.

Include path is boost152/ only
Library path is boost152/stage/lib
person Andrew    schedule 03.02.2013
comment
Хм ... Я пошел и проверил счетчик. Я установил свои переменные среды как таковые: '$ (BOOST) =% DEV% \ boost_1_52_0 \', где '% DEV% - это C: \ Dev \', а в каталоге VC ++ под свойством у меня было следующее: 'Include: $ (BOOST) '' Библиотека: $ (BOOST) stage \ lib \ ' - person Xavier R X Tan; 03.02.2013

Обязательно добавьте правильные каталоги в свойства компоновщика.

Прочтите этот пост для получения дополнительных сведений. Ошибка компоновщика повышения: неразрешенный класс внешнего символа boost :: system :: error_category const & __cdecl boost :: system :: get_system_category (void)

Также вам нужно добавить этот путь в каталоги добавления компоновщика:

$ (BOOST_ROOT) \ bin.v2 \ libs \ thread \ build \ msvc-xx.0 \ release \ address-model-64 \ link-static \ threading-multi

где xx - ваша версия визуальной студии

person Nicola Pezzotti    schedule 03.02.2013
comment
Привет, я наткнулся на этот пост перед тем, как опубликовать свой вопрос. Сделали то, что там сказано, но все равно не повезло. - person Xavier R X Tan; 03.02.2013
comment
Можете ли вы разместить здесь свои каталоги добавления линкера? - person Nicola Pezzotti; 03.02.2013
comment
$ (BOOST) stage \ lib \; $ (LibraryPath) BOOST - это C: \ Dev \ boost_1_52_0 \ - person Xavier R X Tan; 03.02.2013
comment
Еще подсказки. Если вы используете Visual Studio, обратите внимание, что вы должны закрыть его, прежде чем он сможет читать новые переменные среды. Например, в Visual Studio 2005 вам нужно закрыть ВСЕ экземпляры VS2005. - person Nicola Pezzotti; 03.02.2013
comment
да, я на самом деле знаю об этом. Поэтому каждый раз, когда я меняю свою среду var. Я перезапущу свой VS, чтобы учесть изменения. - person Xavier R X Tan; 03.02.2013
comment
Найдите на своем диске .lib и добавьте содержащий его каталог прямо в дополнительные каталоги компоновщика. Я совершенно уверен, что подобная установка мне подходит на работе. Завтра проверю для тебя - person Nicola Pezzotti; 03.02.2013
comment
Вам нужно добавить этот путь в каталоги добавления компоновщика: $ (BOOST_ROOT) \ bin.v2 \ libs \ thread \ build \ msvc-10.0 \ release \ address-model-64 \ link-static \ threading-multi - person Nicola Pezzotti; 04.02.2013

Эти два определения ниже испортили мой компоновщик, вызвав одну красивую ошибку «LNK2001: неразрешенный внешний символ». У вас есть что-нибудь в вашем коде?

//#define BOOST_FILESYSTEM_NO_DEPRECATED
//#define BOOST_FILESYSTEM_NO_LIB
person agodinhost    schedule 07.12.2014