부스트 링커 오류:해결되지 않은 외부 기호 "class Boost::system::error_category const & __cdecl Boost::system::get_system_category(void)"
-
21-08-2019 - |
문제
저는 처음으로 Boost를 시작했습니다. 세부 정보는 다음과 같습니다.
- 저는 Visual Studio 2008 SP1을 사용하고 있습니다.
- x64 빌드를 하고 있어요
- 저는 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}