将外部库导入 ROS 节点

Import an external library into a ROS node

这是我第一次使用堆栈溢出,所以我对此有点陌生。我一直在从事个人机器人项目,并且下载了一个 GitHub 目录。我已经对其进行了编译、测试(有效)并且生成了 library.a 文件(因为我正在使用 Ubuntu 16.04 和 ROS Kinetic)。我不知道的是我必须添加到我的 CMakeLists.txt 文件中才能在 ROS 节点 cpp 文件上加载通信功能。

我对 CMakeLists.txt 文件的编译的实际描述如下:

...
add_executable(test_node src/test_node.cpp)
add_dependencies(test_node ${catkin_EXPORTED_TARGETS})
target_link_libraries(test_node ${catkin_LIBRARIES})
...

我知道如果库是 *.so 文件,我必须在 target_link_libraries 上添加库,但事实并非如此。为了将我的库函数加载到我的 ROS 节点中,我应该在我的 CMakeLists.txt 文件中添加什么?

您的答案基于 属性 函数 add_library()

查看此示例块:

add_library(library_name STATIC IMPORTED)
set_target_properties(library_name PROPERTIES IMPORTED_LOCATION path/to/your/lib.a)

有了这个,您可以继续添加这个库:

target_link_libraries(your_target library_name)

但是不要忘记将这个静态库包含文件添加到您的目标中。


问题通过以下代码解决:

...
find_package(Threads)
add_library(github_library STATIC IMPORTED GLOBAL)
set_target_properties(my_library PROPERTIES IMPORTED_LOCATION 
my_library_directory/my_library.a)
...
target_link_libraries(my_cpp_ros_node ${catkin_LIBRARIES} my_library ${CMAKE_THREAD_LIBS_INIT})
...