2013-08-13 4 views
6

나는 명백한 것을 볼 수 없다고 보인다. 당신이 할 수 http://pastie.org/8231509
: 내 프로젝트에 대한 몇 가지 부스트 라이브러리 기능을 사용하고 싶어하고 나는이 좋은 오류 갑자기 무엇입니까 알고 : 주요 여기에 내 CMakeLists.txt, 헤더를 찾을 수'boost :: system :: generic_category()'에 대한 정의되지 않은 참조는 무엇입니까?

Linking CXX executable ATFOR CMakeFiles/ATFOR.dir/stdafx.cc.o: In function __static_initialization_and_destruction_0(int, int)': stdafx.cc:(.text+0x3c): undefined reference to boost::system::generic_category()' stdafx.cc:(.text+0x48): undefined reference to boost::system::generic_category()' stdafx.cc:(.text+0x54): undefined reference to boost::system::system_category()' CMakeFiles/ATFOR.dir/Main.cc.o: In function __static_initialization_and_destruction_0(int, int)': Main.cc:(.text+0x29d): undefined reference to boost::system::generic_category()' Main.cc:(.text+0x2a9): undefined reference to boost::system::generic_category()' Main.cc:(.text+0x2b5): undefined reference to boost::system::system_category()' collect2: error: ld returned 1 exit status

을하고, 나는 CMakeLists로 놀아 보았고, 프로젝트에 필요한 모든 헤더를 가지고 있다고 확신한다. 어쨌든, 나는 결코 전에 그런 오류가 없었고 나는 정말로 남겨진 아이디어가 없기 때문에 여기서 잘못된 점에 대한 제안/해결책을 정말로 고맙게 생각한다. 미리 Thx. 이 프로그램에 링크 될 수 있도록

답변

13

당신은 명시 적으로 시스템 라이브러리를 추가해야합니다

이 별도로 내장되어 다른 부스트 라이브러리 (정규식, 실 등)에 대해이 작업을 수행해야합니다
find_package(Boost REQUIRED COMPONENTS system) 
#          ^^^^^^ this :) 

(see here) .

+0

그 오류를 수정하지 않았다 :/ – Auberotte

+2

Cmake는 파일 시스템, 시스템에 대한 libs를 찾았다 고 말하지만, 내가 만들 때 여전히 링크 오류가있다. libboost-1.53.0- all-dev, 그래서 내가 필요한 전부를 가져야한다. 거기에 boost :: system 헤더를 포함시켜야합니까? 찾지 못했습니다 – Auberotte

7

좋아, 관심있는 사람들을 위해, 마크 가르시아의 대답은 좋은 호출했다하지만 여기에 더 중요한 것은 당신이 명시 적으로 내가 노력

TARGET_LINK_LIBRARIES(ATFOR ${OpenCV_LIBS} curl ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY})

다른 모든 옵션처럼 부스트에서 원하는 libs와 연결해야한다는 것입니다 그리고 읽기에 대해 나를 작동하지 않았다, 왜 모르겠지만이 도움이되기를 바랍니다.

11

"시스템"lib가 연결 단계에서 누락되었습니다. 다음과 같이 내 설정이며, 그것은 오류 해결에만

find_package(Boost 1.55.0 REQUIRED) 

${Boost_LIBRARIES}대로 작동하지 않습니다 사용하면 다음을 사용할 수 없습니다 것을

find_package(Boost 1.55.0 REQUIRED COMPONENTS system filesystem) 

include_directories(... ${Boost_INCLUDE_DIRS}) 

link_directories(... ${Boost_LIBRARY_DIRS}) 

target_link_libraries(... ${Boost_LIBRARIES}) 

참고.

+1

슈퍼 유용한. 감사. +1. 필자가 작성해야만하는 것은'find_package (Boost REQUIRED system)'이다. 나는 (아직) 파일 시스템이 필요하지 않다. –

+1

이 질문은 내 문제와 관련이 없지만 여기에 대한 답변을 살펴보기로 결심했다. 결국 내 문제를 해결 한 파일 시스템이 필요하다는 것을 알게되었다. 고맙습니다. +1. – rayryeng

2

부스트 라이브러리가 올바른 빌드 (gcc, msvc ...)인지 확인하십시오. mingw을 사용하는 프로젝트와 msvc 용으로 빌드 된 라이브러리를 연결하려고 시도했을 때이 오류가 발생했습니다. 다른 경우에는 프로젝트에서 사용중인 플랫폼 용으로 빌드하십시오.

Boost를 처음 사용했을 때, 내 프로젝트에 mingw을 사용했지만 msvc 용 라이브러리를 기본 매개 변수로 사용하여 빌드했습니다. 그러나 CMake는 헤더와 라이브러리를 찾았고, 라이브러리 기능을 사용하고 컴파일 할 때까지는 모든 것이 정상적으로 보였으 나 OP에서 언급 한 오류가 발생했습니다.

다시 작성하여 toolset=gcc으로 다시 작성하면 (Windows, CMake + MinGW를 사용 중이었습니다).

관련 문제