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 ...
@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
Could you please share your project structure tree?
@jayess Thanks for your reply, I have edited my own post.
@skpro19
Can you make sure that your ros path is loaded properly?
source /opt/ros/melodic/setup.bash
@Akhil Kurup yeah this ROS path is already sourced in my
~/.bashrc
@skpro19 I forget to add
main.cpp
@Malik1194 did you cross-check
main.cpp
for any errors? Could you please share yourmain.cpp
file as well?