关于打deb包出现的问题记录,以及ROS相关问题记录

首先是打包必备的 CmakeLists 编写:

主要就是 install 安装到系统环境中,可以参考cmake使用教(二) install的使用
本次打包需要安装的有三点:1.可执行文件 2.launch文件/config文件 3.动态库


install(TARGETS ${
    
    PROJECT_NAME}_node ${
    
    PROJECT_NAME}
  ARCHIVE DESTINATION ${
    
    CATKIN_PACKAGE_LIB_DESTINATION}
  LIBRARY DESTINATION ${
    
    CATKIN_PACKAGE_LIB_DESTINATION}
  RUNTIME DESTINATION ${
    
    CATKIN_PACKAGE_BIN_DESTINATION}
)

install(DIRECTORY launch
  DESTINATION ${
    
    CATKIN_PACKAGE_SHARE_DESTINATION}
)

install(DIRECTORY share/location_fusion/lib/
  DESTINATION ${
    
    CATKIN_PACKAGE_LIB_DESTINATION}
)

其中动态库有个小地方很容易出现错误,上面的写法和下面的写法是不一样的,上面的写法是正确的,安装的时候并不会包括 lib ,而是只安装 lib 里面的内容,否则的话就会安装成 /lib/lib 目录下!

install(DIRECTORY share/location_fusion/lib
  DESTINATION ${
    
    CATKIN_PACKAGE_LIB_DESTINATION}
)

中间在服务器编译出现了个问题,插一下:

terminate called after throwing an instance of 'std::runtime_error'

不知道为什么会出现,解决办法:

export LC_ALL=”en_US.utf8”

安装后,发现库和其他包中同名冲突,两个包同时写在了一个地方,本来是想修改安装地址的,但是一直没有成功,后来干脆换个库名吧,然后就又出现了一个坑!

我想直接更改 .so 的名字,然后跑一下,结果还是会去找之前的包,就很奇怪,干脆重新编译这个库吧,生成的时候就把名字改了,结果就可以运行了!

浪费了挺久的时间。


记录一个刚发现的小知识,普通的可执行文件 调试的话 直接 gdb ./ 就可以,那么对于一个 node 如何使用 gdb 调试呢?

一搜还真有,学到了!

<node launch-prefix="gdb -ex run --args" pkg="livox_mapping" type="scanRegistration_m1" name="scanRegistration_m1" output="screen">

简单又方便,记录一下。


还找到了一篇关于静态库、动态库的文章,很全面很详细!
Linux系统程序运行时加载动态库路径顺序


在测试过程中,topic 回调一直进不去,话题名和类型确认无误,并且在笔记本上正常,一旦进入机器就无法进入回调,困扰了很久,最终排查到原因,记录一下:

[WARN] [WallTime: 1679212342.885326] Could not process inbound connection: Client [/localization_node] wants topic [/navigation_status] to have datatype/md5sum [move_base_msgs/MoveBaseFeedback/22ca97048659da4e2cba790a4f383bcd], but our version has [move_base_msgs/MoveBaseFeedback/e25c7a67891c4b10e6eaa020b50d56da] Dropping connection.{
    
    'topic': '/navigation_status', 'tcp_nodelay': '0', 'md5sum': '22ca97048659da4e2cba790a4f383bcd', 'type': 'move_base_msgs/MoveBaseFeedback', 'callerid': '/localization_node'}

通过机器上编译调试,发现是 md5 值对不上,更换新的 move_base_msgs 功能包去编译就没问题,简单来说就是编译功能包和运行功能包不是同一个,虽然是兼容的,坑!

猜你喜欢

转载自blog.csdn.net/qq_39266065/article/details/124763203