2017-01-05 9 views
1

Boost Iostreams와의 최소 오류에 대한 링크 오류. 내가 libboost_iostream과 연결되어 있지 않은 것 같지만, CMake는 Boost가있는 라이브러리와 다른 응용 프로그램이 문제없이 컴파일되고 링크되었다고보고합니다.CMake를 사용하는 boost :: iostreams :: mapped_file_source :: init()에 대한 정의되지 않은 참조

cmake_minimum_required(VERSION 3.0) 
project(mmap_example CXX) 
set(TARGET mmap_example) 

set(BOOST_MIN_VERSION "1.61.0") 
set(Boost_ADDITIONAL_VERSIONS "1.61.0" "1.61") 
set(Boost_USE_STATIC_LIBS ON) 
set(BOOST_ROOT ${MY_BOOST_DIR}) 

find_package(Boost ${BOOST_MIN_VERSION} COMPONENTS iostreams REQUIRED) 

set(CMAKE_CXX_FLAGS "-std=c++11 -std=gnu++1y -pthread") 
set(CMAKE_EXE_LINKER_FLAGS "-std=c++11 -std=gnu++1y -pthread") 

file(GLOB SOURCES *.cpp) 

include_directories(${Boost_INCLUDE_DIRS}) 

add_executable(${TARGET} ${SOURCES}) 

target_link_libraries(${TARGET} ${Boost_IOSTREAMS}) 

C++ 자체 :

#include <boost/iostreams/device/mapped_file.hpp> 

namespace boost_io = boost::iostreams; 

int main(int argc, char** argv) { 

    boost_io::mapped_file_source file(argv[1]); 
    return 0; 
} 

GCC 출력 : 빌드 Cmake를 사용

Linking CXX executable mmap_example CMakeFiles/mmap_example.dir/mmap.cpp.o: In function boost::iostreams::mapped_file_source::mapped_file_source<char*>(char* const&, unsigned int, long long): mmap.cpp:(.text._ZN5boost9iostreams18mapped_file_sourceC2IPcEERKT_jx[_ZN5boost9iostreams18mapped_file_sourceC5IPcEERKT_jx]+0x43): undefined reference to boost::iostreams::mapped_file_source::init()

GCC (데비안 4.9.2-10) 4.9.2

Cmake 3.0.2

부스트 1.61

답변

5

내가 ${Boost_IOSTREAMS}이 정확한 변수하지 있는지 확인 해요, AFAIK가 ${Boost_LIBRARIES}해야한다 (적어도 내가 항상 사용하는 것입니다). 변수가 정말 cmake 파일에

message(STATUS "Boost_IOSTREAMS: ${Boost_IOSTREAMS}") 

를 사용하여 설정되어있는 경우

당신은 확인할 수 있습니다.

또한

make all VERBOSE=1 

이 라이브러리는 링커 명령 행에 존재하는 것을 확인하기 위해, 모든 명령을 나열하는 데 사용할 수 있습니다.

+0

고마워, 정말 $ {Boost_LIBRARIES} –