Why does "rosgenmsg" in ROS Toolbox fail with "unresolved external symbol" errors after upgrading MATLAB?

5 次查看(过去 30 天)
I have previously worked successfully with custom messages in ROS Toolbox using R2021a. Now, I have upgraded to MATLAB R2021b. I am trying to generate a MATLAB interface for the same custom ROS messages in R2021b. Calling:
>> rosgenmsg('ROSmessages')
fails however with:
Identifying message files in folder 'C:/work/ROSmessages'..Done.
Validating message files in folder 'C:/work/ROSmessages'..Done.
[3/3] Generating MATLAB interfaces for custom message packages... Done.
Running catkin build in folder 'C:/work/ROSmessages/matlab_msg_gen_ros1/win64'.
Build in progress. This may take several minutes...Error using ros.internal.ROSProjectBuilder/buildPackage (line 534)
Error building package: build log.
Error in rosgenmsg (line 377)
buildPackage(builder, [], 'install', catkinMakeArgs); %other messages might need to be present in the same directory
Looking in the build log, at the bottom I see:
   Creating library C:\work\ROSmessages\matlab_msg_gen_ros1\win64\devel\lib\can_decoder_j1939_matlab.lib and object C:\work\ROSmessages\matlab_msg_gen_ros1\win64\devel\lib\can_decoder_j1939_matlab.exp
can_decoder_j1939_CCVS1_message.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl class_loader::impl::AbstractMetaObjectBase::AbstractMetaObjectBase(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (__imp_??0AbstractMetaObjectBase@impl@class_loader@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z) referenced in function "public: __cdecl class_loader::impl::AbstractMetaObject<class MATLABROSMsgInterface<struct can_decoder_j1939::CCVS1_<class std::allocator<void> > > >::AbstractMetaObject<class MATLABROSMsgInterface<struct can_decoder_j1939::CCVS1_<class std::allocator<void> > > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0?$AbstractMetaObject@V?$MATLABROSMsgInterface@U?$CCVS1_@V?$allocator@X@std@@@can_decoder_j1939@@@@@impl@class_loader@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z)
can_decoder_j1939_VDC2_message.cpp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __cdecl class_loader::impl::AbstractMetaObjectBase::AbstractMetaObjectBase(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (__imp_??0AbstractMetaObjectBase@impl@class_loader@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z)
can_decoder_j1939_CCVS1_message.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __cdecl class_loader::impl::AbstractMetaObjectBase::setAssociatedLibraryPath(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (__imp_?setAssociatedLibraryPath@AbstractMetaObjectBase@impl@class_loader@@QEAAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "void __cdecl class_loader::impl::registerPlugin<class can_decoder_j1939_CCVS1_message,class ROSMsgElementInterfaceFactory>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??$registerPlugin@Vcan_decoder_j1939_CCVS1_message@@VROSMsgElementInterfaceFactory@@@impl@class_loader@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z)
can_decoder_j1939_VDC2_message.cpp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __cdecl class_loader::impl::AbstractMetaObjectBase::setAssociatedLibraryPath(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (__imp_?setAssociatedLibraryPath@AbstractMetaObjectBase@impl@class_loader@@QEAAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
can_decoder_j1939_CCVS1_message.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __cdecl class_loader::impl::AbstractMetaObjectBase::isOwnedBy(class class_loader::ClassLoader const *)" (__imp_?isOwnedBy@AbstractMetaObjectBase@impl@class_loader@@QEAA_NPEBVClassLoader@3@@Z) referenced in function "class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > * __cdecl class_loader::impl::createInstance<class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class class_loader::ClassLoader *)" (??$createInstance@V?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@@impl@class_loader@@YAPEAV?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAVClassLoader@1@@Z)
can_decoder_j1939_VDC2_message.cpp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: bool __cdecl class_loader::impl::AbstractMetaObjectBase::isOwnedBy(class class_loader::ClassLoader const *)" (__imp_?isOwnedBy@AbstractMetaObjectBase@impl@class_loader@@QEAA_NPEBVClassLoader@3@@Z)
can_decoder_j1939_CCVS1_message.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) class mwboost::recursive_mutex & __cdecl class_loader::impl::getPluginBaseToFactoryMapMapMutex(void)" (__imp_?getPluginBaseToFactoryMapMapMutex@impl@class_loader@@YAAEAVrecursive_mutex@mwboost@@XZ) referenced in function "class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > * __cdecl class_loader::impl::createInstance<class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class class_loader::ClassLoader *)" (??$createInstance@V?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@@impl@class_loader@@YAPEAV?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAVClassLoader@1@@Z)
can_decoder_j1939_VDC2_message.cpp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) class mwboost::recursive_mutex & __cdecl class_loader::impl::getPluginBaseToFactoryMapMapMutex(void)" (__imp_?getPluginBaseToFactoryMapMapMutex@impl@class_loader@@YAAEAVrecursive_mutex@mwboost@@XZ)
can_decoder_j1939_CCVS1_message.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl class_loader::ClassLoader::getLibraryPath(void)" (__imp_?getLibraryPath@ClassLoader@class_loader@@QEAA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) referenced in function "private: void __cdecl class_loader::ClassLoader::onPluginDeletion<class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > >(class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > *)" (??$onPluginDeletion@V?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@@ClassLoader@class_loader@@AEAAXPEAV?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@@Z)
can_decoder_j1939_VDC2_message.cpp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl class_loader::ClassLoader::getLibraryPath(void)" (__imp_?getLibraryPath@ClassLoader@class_loader@@QEAA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
can_decoder_j1939_CCVS1_message.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __cdecl class_loader::ClassLoader::isLibraryLoaded(void)" (__imp_?isLibraryLoaded@ClassLoader@class_loader@@QEAA_NXZ) referenced in function "private: class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > * __cdecl class_loader::ClassLoader::createRawInstance<class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (??$createRawInstance@V?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@@ClassLoader@class_loader@@AEAAPEAV?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
can_decoder_j1939_VDC2_message.cpp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: bool __cdecl class_loader::ClassLoader::isLibraryLoaded(void)" (__imp_?isLibraryLoaded@ClassLoader@class_loader@@QEAA_NXZ)
can_decoder_j1939_CCVS1_message.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __cdecl class_loader::ClassLoader::isOnDemandLoadUnloadEnabled(void)" (__imp_?isOnDemandLoadUnloadEnabled@ClassLoader@class_loader@@QEAA_NXZ) referenced in function "private: class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > * __cdecl class_loader::ClassLoader::createRawInstance<class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (??$createRawInstance@V?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@@ClassLoader@class_loader@@AEAAPEAV?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
can_decoder_j1939_VDC2_message.cpp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: bool __cdecl class_loader::ClassLoader::isOnDemandLoadUnloadEnabled(void)" (__imp_?isOnDemandLoadUnloadEnabled@ClassLoader@class_loader@@QEAA_NXZ)
can_decoder_j1939_CCVS1_message.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) private: class std::vector<class class_loader::ClassLoader *,class std::allocator<class class_loader::ClassLoader *> > __cdecl class_loader::MultiLibraryClassLoader::getAllAvailableClassLoaders(void)" (__imp_?getAllAvailableClassLoaders@MultiLibraryClassLoader@class_loader@@AEAA?AV?$vector@PEAVClassLoader@class_loader@@V?$allocator@PEAVClassLoader@class_loader@@@std@@@std@@XZ) referenced in function "private: class class_loader::ClassLoader * __cdecl class_loader::MultiLibraryClassLoader::getClassLoaderForClass<class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??$getClassLoaderForClass@V?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@@MultiLibraryClassLoader@class_loader@@AEAAPEAVClassLoader@1@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
can_decoder_j1939_VDC2_message.cpp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) private: class std::vector<class class_loader::ClassLoader *,class std::allocator<class class_loader::ClassLoader *> > __cdecl class_loader::MultiLibraryClassLoader::getAllAvailableClassLoaders(void)" (__imp_?getAllAvailableClassLoaders@MultiLibraryClassLoader@class_loader@@AEAA?AV?$vector@PEAVClassLoader@class_loader@@V?$allocator@PEAVClassLoader@class_loader@@@std@@@std@@XZ)
can_decoder_j1939_CCVS1_message.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) private: static bool class_loader::ClassLoader::has_unmananged_instance_been_created_" (__imp_?has_unmananged_instance_been_created_@ClassLoader@class_loader@@0_NA) referenced in function "private: class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > * __cdecl class_loader::ClassLoader::createRawInstance<class MATLABROSMsgInterface<struct std_msgs::Header_<class std::allocator<void> > > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (??$createRawInstance@V?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@@ClassLoader@class_loader@@AEAAPEAV?$MATLABROSMsgInterface@U?$Header_@V?$allocator@X@std@@@std_msgs@@@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
can_decoder_j1939_VDC2_message.cpp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) private: static bool class_loader::ClassLoader::has_unmananged_instance_been_created_" (__imp_?has_unmananged_instance_been_created_@ClassLoader@class_loader@@0_NA)
C:\work\ROSmessages\matlab_msg_gen_ros1\win64\devel\bin\can_decoder_j1939_matlab.dll : fatal error LNK1120: 9 unresolved externals
[29/826] cmd.exe /C "cd /D C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build\camera_msgs && C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build\catkin_generated\env_cached.bat C:/Users/johndoe/AppData/Roaming/MathWorks/MATLAB/R2020b/ros1/win64/venv/Scripts/python2.exe "C:/Program Files/MATLAB/R2021a/sys/ros1/win64/ros1/share/genmsg/cmake/../../../lib/genmsg/genmsg_check_deps.py" camera_msgs C:/00_Repos/01_David/t91_sim_platform_refocus/ROSmessages/matlab_msg_gen_ros1/win64/src/camera_msgs/msg/CPedestrian.msg camera_msgs/CPedestrianSituation:camera_msgs/CObjectData:camera_msgs/CObjectDataExtVpad"
[30/826] cmd.exe /C "cd /D C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build\camera_msgs && C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build\catkin_generated\env_cached.bat C:/Users/johndoe/AppData/Roaming/MathWorks/MATLAB/R2020b/ros1/win64/venv/Scripts/python2.exe "C:/Program Files/MATLAB/R2021a/sys/ros1/win64/ros1/share/genmsg/cmake/../../../lib/genmsg/genmsg_check_deps.py" camera_msgs C:/00_Repos/01_David/t91_sim_platform_refocus/ROSmessages/matlab_msg_gen_ros1/win64/src/camera_msgs/msg/CFilteredObject.msg camera_msgs/CTracking2dOutput:camera_msgs/TVector2_f32:camera_msgs/CROIStatistics:camera_msgs/TRect:camera_msgs/TVector3_f32:camera_msgs/EIntruderDetectionType"
[31/826] cmd.exe /C "cd /D C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build\camera_msgs && C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build\catkin_generated\env_cached.bat C:/Users/johndoe/AppData/Roaming/MathWorks/MATLAB/R2020b/ros1/win64/venv/Scripts/python2.exe "C:/Program Files/MATLAB/R2021a/sys/ros1/win64/ros1/share/genmsg/cmake/../../../lib/genmsg/genmsg_check_deps.py" camera_msgs C:/00_Repos/01_David/t91_sim_platform_refocus/ROSmessages/matlab_msg_gen_ros1/win64/src/camera_msgs/msg/EIntruderEgoSpeedStatus.msg "
[32/826] cmd.exe /C "cd /D C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build\camera_msgs && C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build\catkin_generated\env_cached.bat C:/Users/johndoe/AppData/Roaming/MathWorks/MATLAB/R2020b/ros1/win64/venv/Scripts/python2.exe "C:/Program Files/MATLAB/R2021a/sys/ros1/win64/ros1/share/genmsg/cmake/../../../lib/genmsg/genmsg_check_deps.py" camera_msgs C:/work/ROSmessages/matlab_msg_gen_ros1/win64/src/camera_msgs/msg/CTramo_CIntrinsicData.msg "
[33/826] cmd.exe /C "cd /D C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build\camera_msgs && C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build\catkin_generated\env_cached.bat C:/Users/johndoe/AppData/Roaming/MathWorks/MATLAB/R2020b/ros1/win64/venv/Scripts/python2.exe "C:/Program Files/MATLAB/R2021a/sys/ros1/win64/ros1/share/genmsg/cmake/../../../lib/genmsg/genmsg_check_deps.py" camera_msgs C:/work/ROSmessages/matlab_msg_gen_ros1/win64/src/camera_msgs/msg/CRoad.msg std_msgs/Header:camera_msgs/CLaneSeparation:camera_msgs/ConstDaCoreInvalidIdx:camera_msgs/CClothoid:camera_msgs/CLane:camera_msgs/CLine"
[34/826] cmd.exe /C "cd /D C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build\camera_msgs && C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build\catkin_generated\env_cached.bat C:/Users/johndoe/AppData/Roaming/MathWorks/MATLAB/R2020b/ros1/win64/venv/Scripts/python2.exe "C:/Program Files/MATLAB/R2021a/sys/ros1/win64/ros1/share/genmsg/cmake/../../../lib/genmsg/genmsg_check_deps.py" camera_msgs C:/work/ROSmessages/matlab_msg_gen_ros1/win64/src/camera_msgs/msg/CExportedDrivingCorridorSegment.msg camera_msgs/TVector2_i32"
ninja: build stopped: subcommand failed.
Base path: C:\work\ROSmessages\matlab_msg_gen_ros1\win64
Source space: C:\work\ROSmessages\matlab_msg_gen_ros1\win64\src
Build space: C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build
Devel space: C:\work\ROSmessages\matlab_msg_gen_ros1\win64\devel
Install space: C:\work\ROSmessages\matlab_msg_gen_ros1\win64\install
####
#### Running command: "ninja build.ninja" in "C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build"
####
####
#### Running command: "ninja install install -j8 -l8" in "C:\work\ROSmessages\matlab_msg_gen_ros1\win64\build"
####
Invoking "ninja install install -j8 -l8" failed

采纳的回答

MathWorks Support Team
The "unresolved external symbol "__declspec(dllimport) ..." linker errors may occur because of a conflict between the code and binaries that have been created for R2021a and the code and binaries generated for R2021b
To resolve this, delete all artifacts folders (ie. all folders except the folder containing the ROS message source code), then re-run "rosgenmsg" to get a clean build in R2021b.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 System Composer 的更多信息

产品


版本

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by