我的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()
目录经过双重检查,它们是正确的。
答案 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
没有解决链接。