Error while building ROS node - Undefined reference to ros init

asked 2021-02-19 09:32:42 -0600

Malik1194 gravatar image

updated 2021-02-22 09:58:29 -0600

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 ...
(more)
edit retag flag offensive close merge delete

Comments

1

@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

jayess gravatar image jayess  ( 2021-02-21 16:28:41 -0600 )edit

Could you please share your project structure tree?

skpro19 gravatar image skpro19  ( 2021-02-21 17:01:11 -0600 )edit

@jayess Thanks for your reply, I have edited my own post.

Malik1194 gravatar image Malik1194  ( 2021-02-21 19:30:09 -0600 )edit

@skpro19

     | _ catkin_ws
          | _ src 
                 | _ cv_bridge
                      | _ CMakeLists.txt
                      | _ package.xml
                 | _ image_transport
                      | _ CMakeLists.txt
                      | _ package.xml
                 | _ roscpp
                      | _ CMakeLists.txt
                      | _ package.xml
                 | _ sensor_msg
                      | _ CMakeLists.txt
                      | _ package.xml
                 | _ std_msg
                      | _ CMakeLists.txt
                      | _ package.xml
                 | _ tf
                      | _ CMakeLists.txt
                      | _ package.xml
                 | _ midas_cpp
                      | _ CMakeLists.txt
                      | _ package.xml
Malik1194 gravatar image Malik1194  ( 2021-02-21 19:36:39 -0600 )edit

Can you make sure that your ros path is loaded properly? source /opt/ros/melodic/setup.bash

Akhil Kurup gravatar image Akhil Kurup  ( 2021-02-21 23:41:05 -0600 )edit

@Akhil Kurup yeah this ROS path is already sourced in my ~/.bashrc

Malik1194 gravatar image Malik1194  ( 2021-02-22 04:36:50 -0600 )edit

@skpro19 I forget to add main.cpp

  | _ catkin_ws
          | _ src 
                 | _ cv_bridge
                      | _ CMakeLists.txt
                      | _ package.xml
                 | _ image_transport
                      | _ CMakeLists.txt
                      | _ package.xml
                 | _ roscpp
                      | _ CMakeLists.txt
                      | _ package.xml
                 | _ sensor_msg
                      | _ CMakeLists.txt
                      | _ package.xml
                 | _ std_msg
                      | _ CMakeLists.txt
                      | _ package.xml
                 | _ tf
                      | _ CMakeLists.txt
                      | _ package.xml
                 | _ midas_cpp
                      | _ CMakeLists.txt
                      | _ package.xml
                      | _ main.cpp
Malik1194 gravatar image Malik1194  ( 2021-02-22 04:39:50 -0600 )edit

@Malik1194 did you cross-check main.cpp for any errors? Could you please share your main.cpp file as well?

skpro19 gravatar image skpro19  ( 2021-02-23 01:36:22 -0600 )edit