Linking CXX executable error, undefined reference to TinyXml
Hello everyone,
I am trying to compile catkin_make on this project more than a month now that is why I am desperately putting it up to the forum, I would be very grateful if you could help me with this somehow, I downloaded a repository from github: https://github.com/philip-long/cable_... and could compile it with ROS Kinetic but since I experienced some issues in the code I asked the author in what environment was he working with it, so I installed ROS Indigo in the suitable ubuntu version and I cant compile the same code ever since. I get a message from catkin_make:
Linking CXX executable /home/aron/catkin_ws/devel/lib/br_motor_driver/ros_driver
[ 14%] Built target _cable_rob_generate_messages_check_deps_cable_msgs
[ 14%] Built target sensor_msgs_generate_messages_cpp
[ 14%] Built target std_msgs_generate_messages_cpp
[ 14%] Built target geometry_msgs_generate_messages_cpp
[ 14%] Built target trajectory_msgs_generate_messages_cpp
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `vtable for TiXmlDocument'
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `TiXmlNode::~TiXmlNode()'
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `TiXmlElement::QueryDoubleAttribute(char const*, double*) const'
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `TiXmlElement::SetAttribute(std::string const&, std::string const&)'
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `TiXmlDocument::Accept(TiXmlVisitor*) const'
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `TiXmlNode::FirstChildElement(char const*) const'
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `TiXmlElement::TiXmlElement(std::string const&)'
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `TiXmlDocument::TiXmlDocument()'
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `TiXmlElement::QueryBoolAttribute(char const*, bool*) const'
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `TiXmlNode::LinkEndChild(TiXmlNode*)'
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `TiXmlDocument::Parse(char const*, TiXmlParsingData*, TiXmlEncoding)'
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `vtable for TiXmlPrinter'
/home/aron/catkin_ws/devel/lib/libbr_robot.so: undefined reference to `TiXmlElement::TiXmlElement(char const*)'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/aron/catkin_ws/devel/lib/br_motor_driver/ros_driver] Error 1
make[1]: *** [cable_driven_robot/br_motor_driver/CMakeFiles/ros_driver.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 14%] Built target _cable_rob_generate_messages_check_deps_robot_cables_msgs
make: *** [all] Error 2
Invoking "make -j2 -l2" failed
I searched a lot of forums where I followed there advice, by installing the tinyxml library again, installed aptitude and installed tinyxml as a package, still didnt work, I installed various versions of tinyxml, still no success I get the same message where it wont be able to create the executable ros_driver I checked the CmakeLists.txt file and followed this tutorial: http://wiki.ros.org/tinyxml to see if there is some error but I couldn't find any, it should work just as it works in ROS Kinetic :/
Also if I run:
# apt search tinyxml
Sorting... Done
Full Text Search... Done
libtinyxml-dev/trusty,now 2.6.2-2 amd64 [installed]
TinyXml library - header and static library
libtinyxml-doc/trusty 2.6.2-2 all
TinyXml library - documentation files
libtinyxml2-0.0.0/trusty ...
There appear to be some lines in your
CMakeLists.txt
that I would assume are left over comments. Example:Can you verify?
Just to get you going: on Indigo, change the order of the
target_link_libraries(..)
statements such that${TinyXML_LIBRARIES}
comes before${catkin_LIBRARIES}
.you might also want to make sure you still have a sane build environment after all of that.
Thank you for your response, yes those lines should be commented, that is a mistake I made when I was pasting it here, sorry, but in the code I have it in comments :) Your suggestion worked, I only needed to change the order, with ${TinyXML_LIBRARIES} coming first and ${catkin_LIBRARIES} coming second, it is funny, that after all the hassle I made the solution is this simple, thank you! I wouldn't solve it without your help, especially because I am still relatively new to ROS :D Thank you very much :D Hope it helps other users as well; if they encounter a similar problem :)