2017-01-05 7 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(Debianの4.9.2-10)4.9.2

cmakeの3.0.2

ブースト1.61

答えて

5

私は(少なくとも、それは私がいつも使用しているものである)私の知る限り、それは${Boost_LIBRARIES}する必要があり、${Boost_IOSTREAMS}が使用する正しい変数であることはよく分かりません。

変数が本当にあなたのcmakeのファイルに

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

を使用して設定されているかどうかをチェックすることができます。

また、ライブラリは、リンカコマンドライン上に存在しているかどうか確認するために、すべてのコマンドを一覧表示する

make all VERBOSE=1 

を使用することができます。

+0

ありがとう、本当に$ {Boost_LIBRARIES} –

関連する問題