1. 程式人生 > >ROS程式設計中如何配置CMakelists.txt來呼叫外部的動態連結庫(.so檔案)

ROS程式設計中如何配置CMakelists.txt來呼叫外部的動態連結庫(.so檔案)

在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就可以了。

至此已經完成了動態連結庫的配置,編譯已經可以通過了,而且可以自由呼叫庫中的物件及函數了。