我想在我的项目中使用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})
非常感谢
答案 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})