如何使用 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 加载多库的主要内容,如果未能解决你的问题,请参考以下文章

<ROS; pluginlib理解与示例

多库共存-冲突问题

jQuery——多库共存

使用 Dagger 2 管理大型多库模块项目中的依赖项

222 jQuery 多库共存

python requests库如何处理302重定向?