项目需要研读ROS源码,这其中碰到的一些问题记录一下:
源码编译过程
(1) 在ubuntu 18.04 上安装ROS melodic的版本。
(2) 下载源码,
ROS源码链接:
https://github.com/ros/ros_comm/tree/melodic-devel/ros_comm
(3) 编译
例如想要编译 ros_comm/tools/rosbag 下的源文件,
新建 ros_comm/tools/rosbag/build 文件夹,之后
mdkir builld
cd build
cmake ..
make
就可以编译源码了。
但是此时要注意, ros_comm/tools/rosbag/CMakeLists.txt 包含的头文件和库文件大多数是
/opt/ros/melodic/include/
路径下的头文件以及路径
/opt/ros/melodic/lib/
下的库文件
所以,阅读ROS源码时,有时需要加一些打印,发现运行程序后,加的打印没有显示。
原因就是这个,因为此时rosbag产生的程序引用的不是源码生成的头文件和库文件,而是本地的头文件和库文件。
例如,ros_comm/tools/rosbag/CMakeLists.txt 中会引用 rosbag_storage.so 文件,
源码中 ros_comm/tools/rosbag_storage下,进行如下操作
mdkir builld
cd build
cmake ..
make
就会产生 librosbag_storage.so 库文件,自己修改的库文件没有被 ros_comm/tools/rosbag/CMakeLists.txt 引用,所以,加的打印无法显示。
使用源码中头文件和库文件的方法
(1) 将路径
/opt/ros/melodic/include/
/opt/ros/melodic/lib/
下的部分头文件和库文件进行改名,例如
mv librosbag_storage.so librosbag_storage_back.so
mv bag.h bag_back.h
之后编译,如果报错, 就在相应的地方改下载的ROS源码路径和自己生成的库路径即可。
参考链接:
https://www.linmao.dev/joy/914/
https://www.linmao.dev/
https://zhuanlan.zhihu.com/p/494474804