在Linux Cent OS 7.0中链接Boost库

时间:2016-02-12 11:06:15

标签: c++ linux boost

我的IDE是Clion,但我认为它没关系,因为它使用 CMakeLists.txt

这是我的 main.cpp ,其中包含了boost filesystem.hpp

#include <iostream>
#include <boost/filesystem.hpp>

using namespace std;

int main() {
    cout << "Hello, World!" << endl;
    return 0;
}

这是我的 CMakeLists.txt

cmake_minimum_required(VERSION 3.2)
project(AsioFirst)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

include_directories("/usr/local/src/boost_1_60_0/boost_1_60_0/")

link_directories("/usr/local/src/boost_1_60_0/boost_1_60_0/stage/lib")

set(SOURCE_FILES main.cpp)
add_executable(AsioFirst ${SOURCE_FILES})

但是当我运行它时(使用参数 - lboost_system -lboost_filesystem),我得到以下错误,这可能是一个链接错误:

boost::system::generic_category()

目录经过双重检查,它们是正确的。

2 个答案:

答案 0 :(得分:2)

不要对依赖项/库路径进行硬编码。更好地使用find_package command来查找Boosts包括目录和库:

cmake_minimum_required(VERSION 3.2)
project(AsioFirst)

#Add a hint about your boost copy
set(BOOST_ROOT "/usr/local/src/boost_1_60_0/boost_1_60_0/")
find_package(Boost REQUIRED COMPONENTS filesystem system)

set(SOURCE_FILES main.cpp)
add_executable(AsioFirst ${SOURCE_FILES})

#More portable than setting CMAKE_CXX_FLAGS
set_property(TARGET AsioFirst PROPERTY CXX_STANDARD 11)
target_include_directories(AsioFirst PRIVATE ${Boost_INCLUDE_DIRS})
target_link_libraries(AsioFirst PRIVATE ${Boost_LIBRARIES})

答案 1 :(得分:-1)

我发布此邮件给以后的访问者: 解决方案是我应该添加到所用库的确切链接:

link_libraries("/usr/local/src/boost_1_60_0/boost_1_60_0/stage/lib/libboost_system.so")
link_libraries("/usr/local/src/boost_1_60_0/boost_1_60_0/stage/lib/libboost_filesystem.so")

似乎参数lboost_system -lboost_filesystem没有解决链接。