添加boost / asio时未定义引用`boost :: system :: generic_category()'

时间:2016-02-02 13:19:08

标签: c++ boost boost-asio

我想在我的项目中使用boost.asio标头,但是当我包含它的.hpp文件时,我在编译时遇到了这个输出错误:

  • 我需要使用boost.asio for crow来发送我的网页请求。

    /home/john/Downloads/clion-1.2.4/bin/cmake/bin/cmake --build /home/john/.CLion12/system/cmake/generated/a3f08900/a3f08900/Release --target rcp - - -j 8 [50%]链接CXX可执行文件/ home / john / projects / rightChoiceProperty / bin / rcp CMakeFiles / rcp.dir / main.cpp.o:在函数_GLOBAL__sub_I_main': main.cpp:(.text.startup+0x53): undefined reference to boost :: system :: generic_category()'中 main.cpp :(。text.startup + 0x58):对boost::system::generic_category()' main.cpp:(.text.startup+0x5d): undefined reference to boost :: system :: system_category()'的未定义引用 main.cpp :(。text.startup + 0x62):未定义的引用`boost :: system :: system_category()' collect2:错误:ld返回1退出状态 CMakeFiles / rcp.dir / build.make:94:目标'/ home / john / projects / rightChoiceProperty / bin / rcp'的配方失败 make [3]: * [/ home / john / projects / rightChoiceProperty / bin / rcp]错误1 CMakeFiles / Makefile2:67:目标'CMakeFiles / rcp.dir / all'的配方失败 make [2]: [CMakeFiles / rcp.dir / all]错误2 CMakeFiles / Makefile2:79:目标'CMakeFiles / rcp.dir / rule'的配方失败 make [1]: [CMakeFiles / rcp.dir / rule]错误2 Makefile:118:目标'rcp'的配方失败 make:* [rcp]错误2

我正在使用CLion 1.2.4作为IDE 这是我的main.cpp内容:

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

using namespace std;

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

这是我的CMakeLists.txt文件内容:

cmake_minimum_required(VERSION 3.3)
project(rcp)

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

set(SOURCE_FILES main.cpp)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin")

include_directories("libraries/boost")

add_executable(rcp ${SOURCE_FILES})

非常感谢

1 个答案:

答案 0 :(得分:2)

-l选项不是编译器选项,它是链接器选项,因此您需要为CMAKE_CXX_FLAGS设置错误的变量仅适用于编译器。

而是使用例如target_link_libraries添加库。像

target_link_libraries(rcp boost_system)

真正应该做的是找到系统安装的Boost库并使用它们。您可以使用find_package执行此操作:

find_package(Boost
    REQUIRED COMPONENTS asio system)

include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(rcp ${Boost_LIBRARIES})