将外部库导入ROS节点

问题描述 投票:0回答:1

这是我第一次使用堆栈溢出,因此我对此有些陌生。我一直在从事个人机器人项目,并下载了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})
...

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

c++ external libraries ros catkin
1个回答
0
投票

您的答案基于函数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})
...
© www.soinside.com 2019 - 2024. All rights reserved.