Я пытаюсь скомпилировать свою программу, но она не будет ссылаться вообще. Я указал путь к файлам 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
Может кто-нибудь сказать мне, что не так?
Обновить:
После перехода на буст 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. Это не может иметь отношение к моему исходному файлу, верно?
Обновить :
Хорошо, я решил эту проблему для повышения 1,51. Оказывается на страницах свойств >> C / C ++ >> Генерация кода >> Включить C ++ Исключения были отключены для меня.
ХОРОШО. Я попытаюсь увидеть, решат ли те же настройки проблему для Boost 1.52. Буду обновлять позже.
У меня была такая же проблема раньше: я строю boost lib с параметрами по умолчанию, которые запускаются bootstrap.bat непосредственно.
если вы используете повышение :: системы в вашем проекте вы должны использовать и назначить версию boost :: system lib для x86 или x64.
Вы можете перекомпилировать 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/
Спасибо выглядит мне как его нет автоматического связывания правильно.
Include path is boost152/ only
Library path is boost152/stage/lib
Обязательно добавьте правильные каталоги в свойствах компоновщика.
Прочитайте этот пост для получения дополнительной информации
Ошибка линкера повышения: Неразрешенный внешний символ "повышение класса :: system :: error_category const & __cdecl boost :: system :: get_system_category (void)"
Также вы должны добавить этот путь в каталоги добавления Linker:
$ (BOOST_ROOT) \ bin.v2 \ ЛИЭС \ нить \ сборка \ MSVC-xx.0 \ выпуск \ адресно-модель-64 \ ссылка статическую \ резьбонарезных мульти
где хх — ваша визуальная студийная версия
Эти два определения ниже испортили мой компоновщик, выдав одну красивую ошибку «LNK2001: нерешенный внешний символ». Есть ли у вас где-то в вашем коде?
//#define BOOST_FILESYSTEM_NO_DEPRECATED
//#define BOOST_FILESYSTEM_NO_LIB