VirtualRobot: undefined reference to SimoxURDFFactory due to inproper CMake dependency management
if tinyxml is not installed, I get the following CMake error
~/repos/simox/build(fix/transform_preallocate) » cmake --build . fabi@i61nb016
[486/919] Building CXX object VirtualRobot/CMakeFiles/VirtualRobot.dir/IK/RobotPoseDifferentialIK.cpp.o
In file included from ../VirtualRobot/IK/RobotPoseDifferentialIK.cpp:1:
../VirtualRobot/IK/RobotPoseDifferentialIK.h:84:72: warning: ‘RobotPoseDifferentialIK’ is deprecated: MMMTools_LegacyConverter [-Wdeprecated-declarations]
[[deprecated("MMMTools_LegacyConverter")]] typedef std::shared_ptr<RobotPoseDifferentialIK> RobotPoseDifferentialIKPtr;
^~~~~~~~~~~~~~~~~~~~~~~
In file included from ../VirtualRobot/IK/RobotPoseDifferentialIK.cpp:1:
../VirtualRobot/IK/RobotPoseDifferentialIK.h:33:82: note: declared here
class [[deprecated("MMMTools_LegacyConverter")]] VIRTUAL_ROBOT_IMPORT_EXPORT RobotPoseDifferentialIK : public DifferentialIK, public std::enable_shared_from_this<RobotPoseDifferentialIK>
^~~~~~~~~~~~~~~~~~~~~~~
[611/919] Linking CXX executable bin/tests/MathFitPlaneTest
FAILED: bin/tests/MathFitPlaneTest
: && /usr/bin/c++ -O3 -g -DNDEBUG VirtualRobot/tests/CMakeFiles/MathFitPlaneTest.dir/MathFitPlaneTest_autogen/mocs_compilation.cpp.o VirtualRobot/tests/CMakeFiles/MathFitPlaneTest.dir/MathFitPlaneTest.cpp.o -o bin/tests/MathFitPlaneTest -Wl,-rpath,/home/fabi/repos/simox/build/lib:/home/fabi/repos/simox/build/3rdParty/rbdl:/home/fabi/.anaconda3/envs/armarx3/lib lib/libVirtualRobot.so /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so lib/libSimoxQtUtility.so lib/libSimoxUtility.so -lstdc++fs /usr/lib/x86_64-linux-gnu/libboost_program_options.so /usr/lib/x86_64-linux-gnu/libboost_thread.so /usr/lib/x86_64-linux-gnu/libboost_chrono.so /usr/lib/x86_64-linux-gnu/libboost_system.so /usr/lib/x86_64-linux-gnu/libboost_date_time.so /usr/lib/x86_64-linux-gnu/libboost_atomic.so -lpthread /usr/lib/x86_64-linux-gnu/libboost_regex.so /usr/lib/libqwt-qt5.so 3rdParty/rbdl/librbdl.so.2.6.0 -ltiff /usr/lib/x86_64-linux-gnu/libnlopt.so -lassimp /usr/lib/x86_64-linux-gnu/libCoin.so /home/fabi/.anaconda3/envs/armarx3/lib/libQt5OpenGL.so.5.12.9 /home/fabi/.anaconda3/envs/armarx3/lib/libQt5Widgets.so.5.12.9 /home/fabi/.anaconda3/envs/armarx3/lib/libQt5Gui.so.5.12.9 /home/fabi/.anaconda3/envs/armarx3/lib/libQt5Core.so.5.12.9 /usr/lib/x86_64-linux-gnu/libSoQt.so && :
lib/libVirtualRobot.so: undefined reference to `VirtualRobot::SimoxURDFFactory::loadFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, VirtualRobot::RobotIO::RobotDescription)'
lib/libVirtualRobot.so: undefined reference to `VirtualRobot::SimoxURDFFactory::~SimoxURDFFactory()'
lib/libVirtualRobot.so: undefined reference to `VirtualRobot::SimoxURDFFactory::SimoxURDFFactory()'
collect2: error: ld returned 1 exit status
[613/919] Linking CXX executable bin/tests/VirtualRobotMujocoMeshTest
FAILED: bin/tests/VirtualRobotMujocoMeshTest
: && /usr/bin/c++ -O3 -g -DNDEBUG VirtualRobot/tests/CMakeFiles/VirtualRobotMujocoMeshTest.dir/VirtualRobotMujocoMeshTest_autogen/mocs_compilation.cpp.o VirtualRobot/tests/CMakeFiles/VirtualRobotMujocoMeshTest.dir/VirtualRobotMujocoMeshTest.cpp.o -o bin/tests/VirtualRobotMujocoMeshTest -Wl,-rpath,/home/fabi/repos/simox/build/lib:/home/fabi/repos/simox/build/3rdParty/rbdl:/home/fabi/.anaconda3/envs/armarx3/lib lib/libVirtualRobot.so /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so lib/libSimoxQtUtility.so lib/libSimoxUtility.so -lstdc++fs /usr/lib/x86_64-linux-gnu/libboost_program_options.so /usr/lib/x86_64-linux-gnu/libboost_thread.so /usr/lib/x86_64-linux-gnu/libboost_chrono.so /usr/lib/x86_64-linux-gnu/libboost_system.so /usr/lib/x86_64-linux-gnu/libboost_date_time.so /usr/lib/x86_64-linux-gnu/libboost_atomic.so -lpthread /usr/lib/x86_64-linux-gnu/libboost_regex.so /usr/lib/libqwt-qt5.so 3rdParty/rbdl/librbdl.so.2.6.0 -ltiff /usr/lib/x86_64-linux-gnu/libnlopt.so -lassimp /usr/lib/x86_64-linux-gnu/libCoin.so /home/fabi/.anaconda3/envs/armarx3/lib/libQt5OpenGL.so.5.12.9 /home/fabi/.anaconda3/envs/armarx3/lib/libQt5Widgets.so.5.12.9 /home/fabi/.anaconda3/envs/armarx3/lib/libQt5Gui.so.5.12.9 /home/fabi/.anaconda3/envs/armarx3/lib/libQt5Core.so.5.12.9 /usr/lib/x86_64-linux-gnu/libSoQt.so && :
lib/libVirtualRobot.so: undefined reference to `VirtualRobot::SimoxURDFFactory::loadFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, VirtualRobot::RobotIO::RobotDescription)'
lib/libVirtualRobot.so: undefined reference to `VirtualRobot::SimoxURDFFactory::~SimoxURDFFactory()'
lib/libVirtualRobot.so: undefined reference to `VirtualRobot::SimoxURDFFactory::SimoxURDFFactory()'
collect2: error: ld returned 1 exit status
[614/919] Linking CXX executable bin/tests/PQP_optimization
FAILED: bin/tests/PQP_optimization
: && /usr/bin/c++ -O3 -g -DNDEBUG VirtualRobot/tests/CMakeFiles/PQP_optimization.dir/PQP_optimization_autogen/mocs_compilation.cpp.o VirtualRobot/tests/CMakeFiles/PQP_optimization.dir/PQP_optimization.cpp.o -o bin/tests/PQP_optimization -Wl,-rpath,/home/fabi/repos/simox/build/lib:/home/fabi/repos/simox/build/3rdParty/rbdl:/home/fabi/.anaconda3/envs/armarx3/lib lib/libVirtualRobot.so /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so lib/libSimoxQtUtility.so lib/libSimoxUtility.so -lstdc++fs /usr/lib/x86_64-linux-gnu/libboost_program_options.so /usr/lib/x86_64-linux-gnu/libboost_thread.so /usr/lib/x86_64-linux-gnu/libboost_chrono.so /usr/lib/x86_64-linux-gnu/libboost_system.so /usr/lib/x86_64-linux-gnu/libboost_date_time.so /usr/lib/x86_64-linux-gnu/libboost_atomic.so -lpthread /usr/lib/x86_64-linux-gnu/libboost_regex.so /usr/lib/libqwt-qt5.so 3rdParty/rbdl/librbdl.so.2.6.0 -ltiff /usr/lib/x86_64-linux-gnu/libnlopt.so -lassimp /usr/lib/x86_64-linux-gnu/libCoin.so /home/fabi/.anaconda3/envs/armarx3/lib/libQt5OpenGL.so.5.12.9 /home/fabi/.anaconda3/envs/armarx3/lib/libQt5Widgets.so.5.12.9 /home/fabi/.anaconda3/envs/armarx3/lib/libQt5Gui.so.5.12.9 /home/fabi/.anaconda3/envs/armarx3/lib/libQt5Core.so.5.12.9 /usr/lib/x86_64-linux-gnu/libSoQt.so && :
lib/libVirtualRobot.so: undefined reference to `VirtualRobot::SimoxURDFFactory::loadFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, VirtualRobot::RobotIO::RobotDescription)'
lib/libVirtualRobot.so: undefined reference to `VirtualRobot::SimoxURDFFactory::~SimoxURDFFactory()'
lib/libVirtualRobot.so: undefined reference to `VirtualRobot::SimoxURDFFactory::SimoxURDFFactory()'
collect2: error: ld returned 1 exit status
[617/919] Building CXX object VirtualRobot/Compression/tests/CMakeFiles/CompressionBZip2Test.dir/CompressionBZip2Test.cpp.o
../VirtualRobot/Compression/tests/CompressionBZip2Test.cpp: In member function ‘void Compression::testNullBlock::test_method()’:
../VirtualRobot/Compression/tests/CompressionBZip2Test.cpp:65:24: warning: unused variable ‘i’ [-Wunused-variable]
for (unsigned char i : blockN2)
^
[620/919] Building CXX object VirtualRobot/tests/CMakeFiles/MathHelpersTest.dir/MathHelpersTest.cpp.o
ninja: build stopped: subcommand failed.
In the CMake output, it is not really mentioned that tinyxml is not installed.
Furthermore, if the URDF lib is not available, I get issues as well
Therefore, either tinyxml and URDF should be required dependencies or handled properly if optional.