Подтвердить что ты не робот

Ошибка компоновщика Boost: нерешенный внешний символ "класс boost:: system:: error_category const & __cdecl boost:: system:: get_system_category (void)"

Я только начинаю с Boost в первый раз, подробности:

  • Я использую Visual Studio 2008 SP1
  • Я делаю x64 Build
  • Я использую boost:: asio only (и любые его зависимости)

Теперь мой код компилируется, и я указал свой проект на библиотеки boost (после создания x64 libs) и прошел мимо простых проблем, теперь я столкнулся с ошибкой компоновщика:

2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)" ([email protected]@[email protected]@[email protected]@XZ)
2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_generic_category(void)" ([email protected]@[email protected]@[email protected]@XZ)

любые идеи?


Я добавил этот define: #define BOOST_LIB_DIAGNOSTIC

И теперь в моем выпуске я вижу это:

1>Linking to lib file: libboost_system-vc90-mt-1_38.lib
1>Linking to lib file: libboost_date_time-vc90-mt-1_38.lib
1>Linking to lib file: libboost_regex-vc90-mt-1_38.lib

который, по-видимому, указывает на то, что он связан с infact в системе lib.

4b9b3361

Ответ 1

Я решил проблему. У меня были 32-битные библиотеки, когда я собирался создавать 64-битные библиотеки. Я исправил свой оператор построения и построил 64-битные библиотеки, и теперь он работает.

Вот моя командная строка bjam:

C:\Program Files (x86)\boost\boost_1_38>bjam --build-dir=c:\boost --build-type=complete --toolset=msvc-9.0 address-model=64 architecture=x86 --with-system

Ответ 2

#include <boost/system/config.hpp>

В моем случае BOOST_LIB_DIAGNOSTIC не показывал, что система автоматически связана. Я разрешил это, просто включив boost/system/config.hpp.

Ответ 3

Вам нужно связать в библиотеке boost_system

Ответ 4

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

Вы можете перекомпилировать библиотеку Boost со следующим пакетным файлом. Сохраните их в корневой папке Boost и запустите ее в CMD Windows (не дважды нажмите!):

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


cd boost_1_60_0
call bootstrap.bat

rem Most libraries can be static libraries
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/

Ответ 5

У меня была та же проблема. Я пробовал все описанное выше, но ничего не помогает. Решение было простым: сначала я работал с пустым проектом, и там у меня была ошибка компоновщика LNK2019. Но когда я создал новое консольное приложение Win32 по умолчанию с файлами stdafx.h, targetver.h и stdafx.cpp, все сработало. Может быть, это будет полезно для кого-то, я трачу на это два дня

Ответ 6

Я пришел к вопросу, выполнив поиск ошибки компоновщика плюс CMAKE, поэтому я добавляю этот комментарий здесь, если кто-то еще найдет этот вопрос таким же образом.

Оказывается, ошибка компоновщика в моем случае была вызвана ошибкой:

    add_definitions(-DBOOST_ALL_DYN_LINK)

в CMakeLists.txt, что отлично подходит для Unix, но не Windows в моем случае. Решение не используется в Windows.

Ответ 7

Мне нужны обе версии и использованная эталонная цель, поэтому я использовал --stagedir =./stageX86 для версии x86 и по умолчанию. /stage для x64

Ответ 8

Я также пришел сюда для этой ошибки компоновщика плюс CMake, но в моем случае это был тот факт, что CMake по умолчанию будет пытаться построить по 32 бит по умолчанию. Это было исправлено, указав -Ax64

cmake -Ax64 {path to CMakeLists.txt}