부스트 링커 오류:해결되지 않은 외부 기호 "class Boost::system::error_category const & __cdecl Boost::system::get_system_category(void)"

StackOverflow https://stackoverflow.com/questions/1066071

문제

저는 처음으로 Boost를 시작했습니다. 세부 정보는 다음과 같습니다.

  1. 저는 Visual Studio 2008 SP1을 사용하고 있습니다.
  2. x64 빌드를 하고 있어요
  3. 저는 Boost::asio만 사용하고 있습니다(및 그에 따른 모든 종속성).

이제 내 코드가 컴파일되고 부스트 라이브러리(x64 라이브러리를 구축한 후)에서 내 프로젝트를 가리키고 간단한 문제를 해결했지만 이제 링커 오류가 발생했습니다.

2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)" (?get_system_category@system@boost@@YAAEBVerror_category@12@XZ)
2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_generic_category(void)" (?get_generic_category@system@boost@@YAAEBVerror_category@12@XZ)

어떤 아이디어가 있나요?


나는 다음 정의를 추가했습니다.#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

이는 실제로 시스템 lib에 연결되어 있음을 나타내는 것 같습니다.

도움이 되었습니까?

해결책

문제를 해결했습니다.64비트 라이브러리를 빌드하려고 했을 때 32비트 라이브러리를 빌드했습니다.내 빌드 문을 수정하고 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

다른 팁

#include <boost/system/config.hpp>

제 경우에는 BOOST_LIB_DIAGNOSTIC이 시스템이 자동으로 연결되는 것을 표시하지 않았습니다.나는 간단히 Boost/system/config.hpp를 포함시켜 이 문제를 해결했습니다.

Boost_system 라이브러리에 링크해야 합니다.

나는 같은 문제가 있었다.위에서 설명한 모든 방법을 시도했지만 아무 도움이 되지 않았습니다.해결책은 간단했습니다.먼저 빈 프로젝트로 작업했는데 링커 오류 LNK2019가 발생했습니다.그러나 stdafx.h, targetver.h 및 stdafx.cpp 파일을 사용하여 새로운 기본 Win32 콘솔 응용 프로그램을 만들었을 때 모든 것이 작동했습니다.누군가에게 도움이 될 수도 있습니다. 저는 이것을 위해 이틀을 보냈습니다.

당신이 사용하는 경우 부스트::시스템 프로젝트에서는 x86 또는 x64 버전의 Boost::system lib를 사용하고 지정해야 합니다.

다음 배치 파일을 사용하여 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/

링커 오류와 CMAKE를 검색하여 질문에 이르렀으므로 다른 사람이 이 질문을 같은 방식으로 찾을 경우를 대비하여 여기에 이 ​​설명을 추가하고 있습니다.

내 경우의 링커 오류는 잘못된 결과로 인한 것임이 밝혀졌습니다.

    add_definitions(-DBOOST_ALL_DYN_LINK)

에서 CMakeLists.txt, Unix에서는 괜찮지만 제 경우에는 Windows에서는 그렇지 않습니다.Windows에서 정의한 솔루션은 사용되지 않습니다.

두 버전이 모두 필요하고 스테이지 대상을 사용했기 때문에 x86 버전에는 --stagedir=./stageX86을 사용하고 x64 버전에는 기본 ./stage를 사용했습니다.

나는 또한 이 링커 오류와 CMake 때문에 여기에 왔지만 제 경우에는 CMake가 기본적으로 32비트로 빌드하려고 시도한다는 사실이었습니다.이 문제는 다음을 지정하여 해결되었습니다. -Ax64

cmake -Ax64 {path to CMakeLists.txt}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top