ROS2 CmakeList如何正确引入第三方.so文件

在使用ros2开发的时候难免会需要引入第三方的厂家提供的.so文件库。注意这里说的并不是自己写的cpp文件转成.so然后再自己的工程项目中使用。例如经常使用的ICANCmd.h头文件和libCanCmd.so库还有onnx推理的时候onnxruntime_c_api.h头文件和libonnxruntime.so库文件。ros1中使用如下代码添加:

target_link_libraries(${PROJECT_NAME}_node
  ${CMAKE_CURRENT_SOURCE_DIR}/lib/libonnxruntime.so      # 微软公司的runntime库
)

但在ROS2中直接使用这种方式添加的话会报找不到 xx.so文件库。这是因为ROS2的.so需要将库引入到指定的文件路径下才能使用。

下面以电机CAN包为例一步步实现电机的.so库调用

mkdir can_test_ws      #  创建can_test_ws工作空间 

cd can_test_ws           #  进入到can_test_ws

mkdir src                    #  创建src文件

cd src

创建一个test_can包依赖rclcpp 节点名称为can_node

ros2 pkg create test_can --build-type ament_cmake --dependencies rclcpp --node-name can_node  

 使用tree查看下文件结构

└── src
    └── test_can
        ├── CMakeLists.txt
        ├── include
        │   └── test_can
        ├── package.xml
        └── src
            └── can_node.cpp

5 directories, 3 files

 添加一个lib文件 拷贝libCanCmd.so文件并且在include/test_can文件中添加一个ICANCmd.h头文件(和libCanCmd.so配套由厂家提供)和一个motorControl.h使用文件和一个motorControl.cpp实现,添加完以后如下: (这里并没有按照hpp头文件cpp源文件的C++创建方式,而是沿用了ICANCmd.h的C语言写法。

└── src
    └── test_can
        ├── CMakeLists.txt
        ├── include
        │   └── test_can
        │       ├── ICANCmd.h
        │       └── motorControl.h
        ├── lib
        │   └── libCanCmd.so
        ├── package.xml
        └── src
            ├── can_node.cpp
            └── motorControl.cpp

6 di

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值