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就可以了。
至此已經完成了動態連結庫的配置,編譯已經可以通過了,而且可以自由呼叫庫中的物件及函數了。