提问人:Karl Montalban 提问时间:2/12/2019 更新时间:2/12/2019 访问量:673
未定义对 boost::system 的引用
Undefined reference to boost::system
问:
我正在尝试使用 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() »
.......
答:
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(){}
评论