编译之后,运行时出现这样的结果
重新编译后依然如此,只好删掉build
文件夹里对应的文件,再编译后就没问题了
内存不足
catkin_make
之所以有时报错内存不足,有时正常,是因为编译是按拓扑顺序,可能同时编译了move_base和teb_local_planner这两个耗内存大的包,导致报错
.so file truncated
catkin_make
中途 ctrl+C 造成- 运行程序时,直接从VMWare关闭虚拟机
新package放入工作空间无法识别
一个新的package放入工作空间后,是不能直接识别的,无论source setup.bash还是catkin_make --pkg
都不行,必须先对整个工作空间catkin_make
,此时才会识别它
不同工作空间的同名package
要尽量避免这种情况,否则会混乱。此时如果有问题,用echo $ROS_PACKAGE_PATH
查看环境变量包含的ROS工作空间
Could not find GTest
执行catkin_make
时,有时会报错Could not find GTest
,这是由于缺少测试模块,加-DBUILD_TESTING=OFF
可以避免测试。
不要移植工作空间,只移植src
把ROS的工作空间转移到另一台电脑上会编译失败,build和devel里有很多文件会构成影响,即使二者的用户名一样也不行。所以每次只能复制src文件夹,放到另一台电脑的工作空间里。
我的一个自定义msg,将整个工作空间移植到另一台电脑,编译没出错,但是echo出错,好像rostopic不被识别一样:
find_package(catkin) 无法识别catkin
使用qt-ros-plugin
,不知怎么操作,导致find_package(catkin)
无法识别catkin,不能在任何工作空间编译,其他命令都正常。利用whereis catkin
找到路径,删除相应文件,然后重装ROS
命令catkin_init_workspace
:Initializes a catkin workspace by creating a top-level CMakeLists.txt.
这个命令最好不要用,创建工作空间还是新建文件夹,然后进入执行catkin_make
程序 catkin_make 尚未安装
执行catkin_make
时,报错:,执行roscd等命令也提示没有安装,感觉就像是没有装ros一样。解决方法: source /opt/ros/kinetic/setup.bash
编译某个包时缺少头文件
编译禾赛雷达的驱动HesaiLidar_General_ROS
,结果报错PandarScan.h: No such file or directory
. 然后又catkin_make
一次,竟然成功了。这时去devel/include
里可以看到缺少的头文件了。 应当是第一次编译时确实缺少,然后接着编译剩下部分,此时就生成头文件了。 再编译第二次,原来需要头文件的地方就编译成功了。
参考: HesaiLidar_General_ROS/issues/24
clock skew detected
出现这个警告是由于时钟不同步导致的,即系统时间比文件修改时间早,换到另一个Linux系统切换可能会出现这个问题。
如果在不同计算机之间传输文件,可能出现这种报警,是由于二者的UTC对时不同。现象是文件的修改时间比当前的系统时间还要晚。可能会导致某些不该编译的文件编译,或者该编译的没有编译。
在受影响的文件夹内执行一次 touch *
即可永久修正这一问题。
依次执行下列指令即可1
2
3find . -type f | xargs -n 5 touch
catkin_make clean
catkin_make
将所有文件都重新touch一遍,更新到本地系统的时间,再make就没问题了。
The dependency target “nav_msgs_gencpp” of target does not exist
1 | CMake Warning (dev) at planners/pure_pursuit_local_planner/CMakeLists.txt:57 (add_dependencies): |
可能加一句1
2
3add_dependencies(${PROJECT_NAME}
${PROJECT_NAME}_gencfg
${PROJECT_NAME}_generate_messages_cpp)