【问题标题】:How to use ros::pluginlib to load multi-library如何使用 ros::pluginlib 加载多库
【发布时间】: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
  $ENV{OSPL_HOME}/lib/libddskernel.so
  $ENV{OSPL_HOME}/lib/libdcpsisocpp.so
)

``` 它可以正确注册到 ROS 包系统,但是当我使用 pluginlib::ClassLoader 加载 A_plugin 时,在抛出 'pluginlib::CreateClassException'what(): MultiLibraryClassLoader 的实例后,我得到了以下 errors:terminate 调用:无法创建类类型测试的对象:: A_Plugin 因为没有工厂存在。确保该库存在并且通过MultiLibraryClassLoader::loadLibrary() 显式加载。我怎么解决这个问题?谢谢!

【问题讨论】:

    标签: ros


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 2015-09-13
      • 1970-01-01
      相关资源
      最近更新 更多