关于工作上一次打deb包出现的问题记录,踩了挺多坑

首先是打包必备的 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系统程序运行时加载动态库路径顺序

你可能感兴趣的:(ROS,linux,运维,服务器)