Error while building ROS node - Undefined reference to ros init
Hello when I do catkin_make I face the following issue :
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
Running command: "make -j8 -l8" in "/home/malik/catkin_ws5/build"
Scanning dependencies of target midas_cpp
[ 50%] Building CXX object midas_cpp/CMakeFiles/midas_cpp.dir/src/main.cpp.o
[100%] Linking CXX executable midas_cpp
CMakeFiles/midas_cpp.dir/src/main.cpp.o: In function main': main.cpp:(.text+0x84a): undefined reference to ros::init(int&, char**, std::string const&, unsigned int)'
CMakeFiles/midas_cpp.dir/src/main.cpp.o: In function Midas::Midas()': main.cpp:(.text._ZN5MidasC2Ev[_ZN5MidasC5Ev]+0x9a): undefined reference to ros::NodeHandle::NodeHandle(std::string const&, std::map<std::string, std::string, std::lessstd::string, std::allocator<std::pair<std::string const, std::string> > > const&)'
main.cpp:(.text._ZN5MidasC2Ev[ZN5MidasC5Ev]+0x75e): undefined reference to ros::NodeHandle::NodeHandle(std::string const&, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > const&)' main.cpp:(.text._ZN5MidasC2Ev[_ZN5MidasC5Ev]+0x983): undefined reference to image_transport::ImageTransport::advertise(std::string const&, unsigned int, bool)'
CMakeFiles/midas_cpp.dir/src/main.cpp.o: In function Midas::imageCb(boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > const> const&)': main.cpp:(.text._ZN5Midas7imageCbERKN5boost10shared_ptrIKN11sensor_msgs6Image_ISaIvEEEEE[_ZN5Midas7imageCbERKN5boost10shared_ptrIKN11sensor_msgs6Image_ISaIvEEEEE]+0x5d): undefined reference to cv_bridge::toCvCopy(boost::shared_ptr<sensor_msgs::Image<std::allocator > const> const&, std::string const&)'
main.cpp:(.text._ZN5Midas7imageCbERKN5boost10shared_ptrIKN11sensor_msgs6Image_ISaIvEEEEE[ZN5Midas7imageCbERKN5boost10shared_ptrIKN11sensor_msgs6Image_ISaIvEEEEE]+0x1175): undefined reference to ros::console::initializeLogLocation(ros::console::LogLocation*, std::string const&, ros::console::levels::Level)' main.cpp:(.text._ZN5Midas7imageCbERKN5boost10shared_ptrIKN11sensor_msgs6Image_ISaIvEEEEE[_ZN5Midas7imageCbERKN5boost10shared_ptrIKN11sensor_msgs6Image_ISaIvEEEEE]+0x1628): undefined reference to ros::console::initializeLogLocation(ros::console::LogLocation*, std::string const&, ros::console::levels::Level)'
CMakeFiles/midas_cpp.dir/src/main.cpp.o: In function bool ros::NodeHandle::param<std::string>(std::string const&, std::string&, std::string const&) const': main.cpp:(.text._ZNK3ros10NodeHandle5paramISsEEbRKSsRT_RKS4_[_ZNK3ros10NodeHandle5paramISsEEbRKSsRT_RKS4_]+0x27): undefined reference to ros::NodeHandle::hasParam(std::string const&) const'
main.cpp:(.text.ZNK3ros10NodeHandle5paramISsEEbRKSsRT_RKS4[ZNK3ros10NodeHandle5paramISsEEbRKSsRT_RKS4]+0x42): undefined reference to ros::NodeHandle::getParam(std::string const&, std::string&) const' CMakeFiles/midas_cpp.dir/src/main.cpp.o: In function bool ros::param::paramstd::string(std::string const&, std::string&, std::string const&)':
midas_cpp/CMakeFiles/midas_cpp.dir/build.make:174: recipe for target 'midas_cpp/midas_cpp' failed
make[2]: *** [midas_cpp/midas_cpp] Error 1
CMakeFiles/Makefile2:475: recipe for target 'midas_cpp/CMakeFiles/midas_cpp.dir/all' failed
make[1]: *** [midas_cpp/CMakeFiles/midas_cpp.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j8 -l8" failed
So mainly there is undefined reference to ros, I tried a lot without success, this is my CMakeLists.txt file:
cmake_minimum_required(VERSION 3.0.2)
project(midas_cpp)
## Compile as C++11, supported in ROS Kinetic and newer
#add_compile_options(-std=c++11)
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
roscpp
tf
cv_bridge
image_transport
rospy
sensor_msgs
std_msgs
)
## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)
list(APPEND CMAKE_PREFIX_PATH "~/libtorch")
list(APPEND CMAKE_PREFIX_PATH "/home/malik/anaconda3/envs/midas/lib/python3.8/site-packages/torch/lib")
list(APPEND CMAKE_PREFIX_PATH "/usr/local/lib/python2.7/dist-packages/torch/lib")
if(NOT EXISTS "~/libtorch")
if (EXISTS "/home/malik/anaconda3/envs/midas/lib/python3.8/site-packages/torch")
include_directories(/usr/local/include)
include_directories(/home/malik/anaconda3/envs/midas/lib/python3.8/site-packages/torch/csrc/api/include)
include_directories(/home/malik/anaconda3/envs/midas/lib/python3.8/site-packages/torch/include)
link_directories(/usr/local/lib)
link_directories(/home/malik/anaconda3/envs/midas/lib/python3.8/site-packages/torch/lib)
set(CMAKE_PREFIX_PATH /home/malik/anaconda3/envs/midas/lib/python3.8/site-packages/torch)
set(Boost_USE_MULTITHREADED ON)
set(Torch_DIR /home/malik/anaconda3/envs/midas/lib/python3.8/site-packages/torch)
endif()
endif()
include_directories( ${OpenCV_INCLUDE_DIRS} )
find_package(Torch REQUIRED)
find_package(OpenCV REQUIRED)
add_executable(midas_cpp src/main.cpp)
target_link_libraries(midas_cpp "${TORCH_LIBRARIES}" "${OpenCV_LIBS} ${catkin_LIBRARIES}")
set_property(TARGET midas_cpp PROPERTY CXX_STANDARD 14)
###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if your package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
INCLUDE_DIRS include
LIBRARIES midas_cpp
CATKIN_DEPENDS cv_bridge image_transport roscpp sensor_msgs std_msgs
# DEPENDS system_lib
)
###########
## Build ##
###########
## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
# include
${catkin_INCLUDE_DIRS}
)
## Declare a C++ library
# add_library(${PROJECT_NAME}
# src/${PROJECT_NAME}/midas_cpp.cpp
# )
## Add cmake target dependencies of the library
## as an example, code may need to be generated before libraries
## either from message generation or dynamic reconfigure
# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
# add_executable(${PROJECT_NAME}_node src/midas_cpp_node.cpp)
## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
## target back to the shorter version for ease of user use
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
## Add cmake target dependencies of the executable
## same as for the library above
# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
## Specify libraries to link a library or executable target against
# target_link_libraries(${PROJECT_NAME}_node
# ${catkin_LIBRARIES}
# )
#############
## Install ##
#############
# all install targets should use catkin DESTINATION variables
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
# catkin_install_python(PROGRAMS
# scripts/my_python_script
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
## Mark executables for installation
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
# install(TARGETS ${PROJECT_NAME}_node
# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
## Mark libraries for installation
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
# install(TARGETS ${PROJECT_NAME}
# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
# )
## Mark cpp header files for installation
# install(DIRECTORY include/${PROJECT_NAME}/
# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
# FILES_MATCHING PATTERN "*.h"
# PATTERN ".svn" EXCLUDE
# )
## Mark other files for installation (e.g. launch and bag files, etc.)
# install(FILES
# # myfile1
# # myfile2
# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
# )
#############
## Testing ##
#############
## Add gtest based cpp test target and link libraries
# catkin_add_gtest(${PROJECT_NAME}-test test/test_midas_cpp.cpp)
# if(TARGET ${PROJECT_NAME}-test)
# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
# endif()
## Add folders to be run by python nosetests
# catkin_add_nosetests(test)
install(TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
add_custom_command(
TARGET midas_cpp POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/midas_cpp
${CMAKE_SOURCE_DIR}/midas_cpp
)
Asked by Malik1194 on 2021-02-19 10:28:10 UTC
Comments
@Malik1194 could you please update your question with a copy and paste of your CMakeLists.txt file instead of linking to it? If/when that link disappears then your question will be much less valuable to the users here. You can delete the boilerplate comments from it and that will significantly decrease the size of it
Asked by jayess on 2021-02-21 17:28:41 UTC
Could you please share your project structure tree?
Asked by skpro19 on 2021-02-21 18:01:11 UTC
@jayess Thanks for your reply, I have edited my own post.
Asked by Malik1194 on 2021-02-21 20:30:09 UTC
@skpro19
Asked by Malik1194 on 2021-02-21 20:36:39 UTC
Can you make sure that your ros path is loaded properly?
source /opt/ros/melodic/setup.bash
Asked by Akhil Kurup on 2021-02-22 00:41:05 UTC
@Akhil Kurup yeah this ROS path is already sourced in my
~/.bashrc
Asked by Malik1194 on 2021-02-22 05:36:50 UTC
@skpro19 I forget to add
main.cpp
Asked by Malik1194 on 2021-02-22 05:39:50 UTC
@Malik1194 did you cross-check
main.cpp
for any errors? Could you please share yourmain.cpp
file as well?Asked by skpro19 on 2021-02-23 02:36:22 UTC