ROS编程中如何配置CMakelists.txt来调用外部的动态链接库(.so文件)

时间:2022-03-28 15:51:50

在ubuntu下对ROS进行编程很经常的会用到动态链接库的调用,而ROS中的编译系统为catkin_make,和常规的CMake略有不同,具体不同点可参考这篇博客(点击打开链接),这就需要正确配置CMakelists.txt文件,以便编译系统找到你引用的库和头文件。

总的来说其实很简单,下面将列举详细步骤和实例。

比如我需要引用一个动态链接库名字为libRobotBus.so。

与其对应的头文件有:

BytesObject.h  

Common.h 

 DataObject.h   

MessageBlock.h  

MessageSerializable.h  

MotorID.h  

RobotMessage.h  

RobotSession.h

1.将动态链接库(so文件)以及对应的头文件都保存到某一个文件夹.

这里我直接将其保存在我的工作空间的库文件夹中(include/test_so),我的工作空间(3_so_test_ws)的文件树如下所示:

└── src
    ├── CMakeLists.txt -> /opt/ros/indigo/share/catkin/cmake/toplevel.cmake
    └── test_so
        ├── CMakeLists.txt
        ├── CMakeLists.txt~
        ├── include
        │   └── test_so
        │       ├── BytesObject.h
        │       ├── Common.h
        │       ├── DataObject.h
        │       ├── libRobotBus.so
        │       ├── MessageBlock.h
        │       ├── MessageSerializable.h
        │       ├── MotorID.h
        │       ├── RobotMessage.h
        │       └── RobotSession.h
        ├── package.xml
        └── src
            ├── talker.cpp
            └── talker.cpp~

2.修改CMakelists.txt文件。

CMakelists.txt文件中,我们首先需要把这个动态链接库的绝对文件路径告诉编译器,这里增加的语句是:

include_directories(/home/shawn/ipal_files/3_so_test_ws/src/test_so/include/test_so)
然后使用target_link_libraries函数来指定可执行文件链接的库。这个要用在add_executable()后面,具体为:

target_link_libraries(talker ${catkin_LIBRARIES} RobotBus)
这里编译系统默认的就是so文件,所以只需要添加RobotBus就可以了。

至此已经完成了动态链接库的配置,编译已经可以通过了,而且可以*调用库中的对象及函数了。