Hi to all! first of all, english is not my native language :D I'm sorry if there are too many mistakes, here we go.
I decided to add a library master_utils
inside the package master_core
to add some extended functions to some msg types created inside the package. I followed the docs to add/install the library with the rest of the package.
The strange situation that I'm going through is:
- When calling a function defined in
master_utils
from another package (addingmaster_core
as dependecy and#include <master_core/master_utils.h>
) it builds with no error and has the expected result. - When calling the same function defined in
master_utils
on the fileRSI_parser.cpp
(both inside the same packagemaster_core
) I get a build error.
The error catkin build throws is:
/home/lewis/master/mestrado/src/ROS/catkin_ws/src/master_core/src/controller/RSI_parser.cpp:37: error: undefined reference to `stampedTFtoKukaPose(tf::StampedTransform&, master_core::KukaPose_<std::allocator<void> >&)'
I found this post that is closely related to my problem, but didn't find anything related to the solution on the docs page I was following. Maybe that points that the problem is more related to CMakeLists than to ROS.
I don't know if it's related, but when adding the #include
on .cpp
files, all of the generated headers are duplicated on QT auto completion, except master_utils
.
The package structure and files are as the following:
package structure:
master_core
-include
-master_core
-master_utils.h
-src
-master_utils.cpp
-controller
-RSI_parser.cpp
CMakeLists.txt (Omitting some add_executable/add_dependencies/target_link_libraries from other nodes)
cmake_minimum_required(VERSION 2.8.3)
project(master_core)
add_compile_options(-std=c++11)
find_package(catkin REQUIRED COMPONENTS
roscpp
message_generation
geometry_msgs
tf
master_moveit
moveit_ros_planning_interface
urdf
)
add_message_files(
FILES
RobotAxis.msg
KukaPose.msg
RSI.msg
)
generate_messages(
DEPENDENCIES
std_msgs # Or other packages containing msgs
geometry_msgs
moveit_msgs
)
catkin_package(
INCLUDE_DIRS include
LIBRARIES master_utils
CATKIN_DEPENDS roscpp
message_runtime
)
include_directories(
include
${catkin_INCLUDE_DIRS}
)
add_library(master_utils src/master_utils.cpp)
add_dependencies(master_utils ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(master_utils ${catkin_LIBRARIES})
add_executable(RSI_node src/controller/RSI_parser.cpp)
add_dependencies(RSI_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(RSI_node ${catkin_LIBRARIES})
install(TARGETS master_utils
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
)
install(DIRECTORY include/${PROJECT_NAME}/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
)
master_utils.h
#ifndef MASTER_UTILS_H
#define MASTER_UTILS_H
#include <ros/ros.h>
#include <master_core/KukaPose.h>
#include <master_core/RSI.h>
#include <master_core/RobotAxis.h>
#include <tf/tf.h>
void stampedTFtoKukaPose(tf::StampedTransform&, master_core::KukaPose&);
#endif
RSI_parser.cpp
...
#include <master_core/master_utils.h>
...
...
void sendRSI() {
...
tf::StampedTransform ref_to_RIst;
master_core::KukaPose RIst;
stampedTFtoKukaPose(ref_to_RIst, RIst);
...
}
I think maybe I left a configuration out of CMakeLists.txt, or am missing a concept about the compiler. (The probability is high, as I'm no C++ expert)
Do I have to develop libraries on a separate package or is it possible to develop it as extension from the same package as I'm trying to do?
Thank you very much for your attention!
Originally posted by lewis_ferreira on ROS Answers with karma: 3 on 2020-05-04
Post score: 0