未定义对 boost::system 的引用

Undefined reference to boost::system

提问人:Karl Montalban 提问时间:2/12/2019 更新时间:2/12/2019 访问量:673

问:

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

我使用的 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

我的主要.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

评论

0赞 Ryan Christensen 2/12/2019
您可能需要为 boost 库添加 -lboost_system 编译器标志,请参阅:stackoverflow.com/questions/9723793/...

答:

1赞 Matthieu Brucher 2/12/2019 #1

由于您没有 Boost 1.66,因此您需要链接到 boost::system:

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

评论

0赞 Karl Montalban 2/12/2019
谢谢你的回答,我不知道这是否是同一个问题,但我现在有这个错误...... /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: 错误: ld 返回 1 退出状态 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:目标“all”的配方失败 make: [全部] 错误 2
0赞 Matthieu Brucher 2/12/2019
当然,您需要有一个可执行文件的函数(并阅读错误消息,毕竟它们是清晰的法语)。main
0赞 Karl Montalban 2/12/2019
我明白,但我内部确实有一个 main.cpp 和一个 main() 函数。
0赞 Matthieu Brucher 2/12/2019
显然不是。该错误非常明确地表明您没有 main 函数这一事实。
0赞 Matthieu Brucher 2/12/2019
一个简单的主要工作吗?没有任何包含标头,什么都没有?int main(){}