我正在尝试使用ros::pluginlib
加载一个名为A_Plugin的插件,该插件已正确注册到ROS Package System。需要注意的一点是,A_Plugin依赖Opensplice DDS
,需要链接DDS库" libddskernel.so
" " libdcpsisocpp.so
&#34 ;.在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时,我在抛出errors:terminate
MultiLibraryClassLoader的实例后调用了以下'pluginlib::CreateClassException'what():
:无法创建类的对象type test :: A_Plugin因为没有工厂存在。确保库存在并通过MultiLibraryClassLoader::loadLibrary()
显式加载。我怎么解决这个问题?谢谢!
答案 0 :(得分:0)
我有类似的问题,结果我错过了* .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