将外部库导入ROS节点

2022-06-06 00:00:00 ros libraries external c++ catkin

这是我第一次使用堆栈溢出,所以我对此还是个新手。我一直在做一个个人机器人项目,我下载了一个GitHub目录。我已经编译了它,测试了它(它工作正常),我已经生成了library.a文件(因为我正在使用Ubuntu 16.04和Ros Kinetic)。我不知道的是,为了在ROS节点CPP文件上加载通信功能,我必须向CMakeLists.txt文件添加什么。

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

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

我知道如果TARGET_LINK_LIBRARY库是*.so文件,我必须在该库上添加库,但它不是。我应该向CMakeLists.txt文件添加什么才能将库函数加载到我的ROS节点?


解决方案

您的答案基于函数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})
...

相关文章