如何使用 ros::pluginlib 加载多库
Posted
技术标签:
【中文标题】如何使用 ros::pluginlib 加载多库【英文标题】:How to use ros::pluginlib to load multi-library 【发布时间】:2017-10-16 15:08:55 【问题描述】:我正在尝试使用ros::pluginlib
加载一个名为 A_Plugin 的插件,该插件已正确注册到 ROS 包系统。需要注意的一点是,A_Plugin 依赖于Opensplice DDS
,它需要链接 DDS 库“libddskernel.so
”、“libdcpsisocpp.so
”。在CmakeLists.txt
文件中,我这样写:
```
add_library(A_Plugin
src/aplugin.cpp
)
target_link_libraries(A_Plugin
$ENVOSPL_HOME/lib/libddskernel.so
$ENVOSPL_HOME/lib/libdcpsisocpp.so
)
```
它可以正确注册到 ROS 包系统,但是当我使用 pluginlib::ClassLoader 加载 A_plugin 时,在抛出 'pluginlib::CreateClassException'what():
MultiLibraryClassLoader 的实例后,我得到了以下 errors:terminate
调用:无法创建类类型测试的对象:: A_Plugin 因为没有工厂存在。确保该库存在并且通过MultiLibraryClassLoader::loadLibrary()
显式加载。我怎么解决这个问题?谢谢!
【问题讨论】:
【参考方案1】:我遇到了类似的问题,原来我在 *.cpp 文件中缺少插件类声明。我把它包括在内,它工作得很好。声明应该是这样的:
PLUGINLIB_DECLARE_CLASS(rqt_example_cpp, MyPlugin, rqt_example_cpp::MyPlugin, rqt_gui_cpp::Plugin)
这可以在 rqt 教程 github repo 的示例中看到,第 62 行: https://github.com/lucasw/rqt_mypkg/blob/master/rqt_example_cpp/src/rqt_example_cpp/my_plugin.cpp
【讨论】:
以上是关于如何使用 ros::pluginlib 加载多库的主要内容,如果未能解决你的问题,请参考以下文章