c++ - 将外部库导入 ROS 节点
问题描述
这是我第一次使用堆栈溢出,所以我对此有点陌生。我一直在做一个个人机器人项目,我已经下载了一个 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 上添加库,但事实并非如此。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})
...
推荐阅读
- c# - 如何将 C++ 代码转换为 C# 关于 memcpy
- python - pyads.pyads.ADSError: ADSError: 服务器不支持服务 (1793)
- angular - 如何修复:运行 ng serve 或 npm start 时,Angular 8 中的数据路径“”应该有必需的属性“browserTarget”错误
- swift - '? 中的结果值 :' 表达式具有不匹配的类型 'String.SubSequence' (aka 'Substring') 和 'String'
- eclipse - STS4:无法在调试模式下连接到 Couchbase
- google-bigquery - Bigquery BI 引擎是否适用于分区表
- ansible - Ansible:不能定义以“/”开头的变量
- javascript - API 响应显示在 console.log 中,但不在反应页面上
- python - 使用 Dataframe.Groupby 对行进行分组,但将其他字段与 Grouper 中提到的列分开
- bash - 如何在 if 条件下使用 netcat 命令的退出代码?