【问题标题】:Undefined reference to boost::system对 boost::system 的未定义引用
【发布时间】:2019-07-05 23:17:22
【问题描述】:

我正在尝试使用 Cmake 编译一个简单的 ROS/cpp 项目,但我遇到了 boost librairies 的问题...

我使用的 Cmake :

cmake_minimum_required(VERSION 2.8.3)

project(laserprojection)

#add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)

find_package(catkin REQUIRED COMPONENTS 
  roscpp
  rospy
  std_msgs
  geometry_msgs
  message_generation
)

find_package(Boost 1.65.0 REQUIRED COMPONENTS system thread filesystem)
find_package(Eigen3 REQUIRED)

include_directories(${catkin_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR} ${Boost_INCLUDE_DIRS})

add_executable(main main.cpp)

我的 cmake 命令显示找到了 Boost:

Boost version: 1.65.1
Found the following Boost libraries:
system
thread
filesystem
chrono
date_time
atomic

我的 main.cpp :

#include <ros/ros.h>
#include <tf/transform_listener.h>
#include <laser_geometry/laser_geometry.h>

这是我的错误:

........

main.cpp:(.text+0x63) : référence indéfinie vers « boost::system::generic_category() »
main.cpp:(.text+0x6f) : référence indéfinie vers « boost::system::generic_category() »
main.cpp:(.text+0x7b) : référence indéfinie vers « boost::system::system_category() »

.......

【问题讨论】:

标签: c++ boost cmake ros undefined-reference


【解决方案1】:

由于你没有 Boost 1.66,你需要链接到 boost::system:

add_executable(main main.cpp)
target_link_libraries(main ${Boost_SYSTEM_LIBRARY})

【讨论】:

  • 谢谢你的回答,我不知道是不是同样的问题,但我现在有这个错误... /usr/lib/gcc/x86_64-linux-gnu/7/。 ./../../x86_64-linux-gnu/Scrt1.o : Dans la fonction «_start »: (.text+0x20) : référence indéfinie vers « main » collect2: error: ld returned 1 exit status CMakeFiles/main .dir/build.make:95:目标“main”的配方失败 make[2]:*** [main] 错误 1 ​​CMakeFiles/Makefile2:611:目标“CMakeFiles/main.dir/all”的配方失败 make[ 1]: *** [CMakeFiles/main.dir/all] 错误 2 Makefile:140: 目标“所有”的配方失败 make: *** [all] 错误 2
  • 当然,你需要有一个可执行文件的main函数(并阅读错误消息,它们毕竟是清晰的法语)。
  • 我明白,但我确实有一个 main.cpp 和一个 main() 函数。
  • 显然不是。该错误非常明确地表明您没有具有主要功能。
  • 简单的主要int main(){} 工作吗?没有任何包含头,什么都没有?