C++ 使用CMake对boost::iostreams::mapped_file_source::init()的未定义引用

C++ 使用CMake对boost::iostreams::mapped_file_source::init()的未定义引用,c++,cmake,boost-iostreams,C++,Cmake,Boost Iostreams,使用Boost Iostreams链接最小示例时出错。看起来我还没有链接到libboost_iostream,但是CMake报告说找到了库,其他应用程序使用Boost编译和链接没有任何问题 使用Cmake进行构建: cmake_minimum_required(VERSION 3.0) project(mmap_example CXX) set(TARGET mmap_example) set(BOOST_MIN_VERSION "1.61.0") set(Boost_ADDITIONAL_V

使用Boost Iostreams链接最小示例时出错。看起来我还没有链接到libboost_iostream,但是CMake报告说找到了库,其他应用程序使用Boost编译和链接没有任何问题

使用Cmake进行构建:

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;
}
#包括
名称空间boost\u io=boost::iostreams;
int main(int argc,字符**argv){
boost_io::映射的_文件_源文件(argv[1]);
返回0;
}
GCC输出:

链接CXX可执行文件mmap\u示例
CMakeFiles/mmap_example.dir/mmap.cpp.o:函数boost::iostreams::mapped_file_source::mapped_file_source(char*const&,unsigned int,long-long):
mmap.cpp:(.text.ZN5boost9iostreams18mapped_file_sourceC2IPcEERKT_jx[ZN5boost9iostreams18mapped_file_sourceC5IPcEERKT_jx]+0x43):对boost::iostreams::mapped_file_source::init()的未定义引用

通用条款(Debian 4.9.2-10)4.9.2

Cmake 3.0.2


Boost 1.61

我不确定
${Boost\u IOSTREAMS}
是正确的变量,因为它应该是
${Boost\u LIBRARIES}
(至少我一直都在使用)

您可以使用

message(STATUS "Boost_IOSTREAMS: ${Boost_IOSTREAMS}")
在您的cmake文件中

你也可以使用

make all VERBOSE=1

要列出所有命令,请检查链接器命令行上存在哪些库。

我不确定
${Boost\u IOSTREAMS}
是否是要使用的正确变量,因为它应该是
${Boost\u libraries}
(至少这是我一直使用的)

您可以使用

message(STATUS "Boost_IOSTREAMS: ${Boost_IOSTREAMS}")
在您的cmake文件中

你也可以使用

make all VERBOSE=1

要列出所有命令,请检查链接器命令行上存在哪些库。

谢谢,它实际上是${Boost\u libraries}谢谢,它实际上是${Boost\u libraries}