項目需要研讀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