error in migrating fuerte to hydro, using SR4000
hi there, I am using SR4000(3D camera) and it is going well under Fuerte. But I have to migrate the package to Hydro. When I try to compile it, I always face this error.
my error is,
Scanning dependencies of target swissranger_camera
[ 36%] Building CXX object camera_drivers_experimental/swissranger_camera/CMakeFiles/swissranger_camera.dir/src/sr.cpp.o
[ 37%] Building CXX object camera_drivers_experimental/swissranger_camera/CMakeFiles/swissranger_camera.dir/src/dev_sr.cpp.o
Linking CXX executable /home/ktset/catkin_ws/devel/lib/swissranger_camera/swissranger_camera
CMakeFiles/swissranger_camera.dir/src/sr.cpp.o: In function `swissranger_camera::SwissRangerConfig::__get_statics__()':
sr.cpp:(.text._ZN18swissranger_camera17SwissRangerConfig15__get_statics__Ev[swissranger_camera::SwissRangerConfig::__get_statics__()]+0x23): undefined reference to `dynamic_reconfigure::__init_mutex__'
CMakeFiles/swissranger_camera.dir/src/sr.cpp.o: In function `SRNode::SRNode(ros::NodeHandle const&)':
sr.cpp:(.text._ZN6SRNodeC2ERKN3ros10NodeHandleE[_ZN6SRNodeC5ERKN3ros10NodeHandleE]+0x53): undefined reference to `image_transport::ImageTransport::ImageTransport(ros::NodeHandle const&)'
sr.cpp:(.text._ZN6SRNodeC2ERKN3ros10NodeHandleE[_ZN6SRNodeC5ERKN3ros10NodeHandleE]+0x73): undefined reference to `image_transport::ImageTransport::ImageTransport(ros::NodeHandle const&)'
sr.cpp:(.text._ZN6SRNodeC2ERKN3ros10NodeHandleE[_ZN6SRNodeC5ERKN3ros10NodeHandleE]+0x93): undefined reference to `image_transport::ImageTransport::ImageTransport(ros::NodeHandle const&)'
sr.cpp:(.text._ZN6SRNodeC2ERKN3ros10NodeHandleE[_ZN6SRNodeC5ERKN3ros10NodeHandleE]+0x3b1): undefined reference to `image_transport::ImageTransport::advertise(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, bool)'
sr.cpp:(.text._ZN6SRNodeC2ERKN3ros10NodeHandleE[_ZN6SRNodeC5ERKN3ros10NodeHandleE]+0x44e): undefined reference to `image_transport::ImageTransport::advertise(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, bool)'
sr.cpp:(.text._ZN6SRNodeC2ERKN3ros10NodeHandleE[_ZN6SRNodeC5ERKN3ros10NodeHandleE]+0x4e5): undefined reference to `image_transport::ImageTransport::advertise(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, bool)'
sr.cpp:(.text._ZN6SRNodeC2ERKN3ros10NodeHandleE[_ZN6SRNodeC5ERKN3ros10NodeHandleE]+0x579): undefined reference to `image_transport::ImageTransport::advertise(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, bool)'
sr.cpp:(.text._ZN6SRNodeC2ERKN3ros10NodeHandleE[_ZN6SRNodeC5ERKN3ros10NodeHandleE]+0xcf1): undefined reference to `image_transport::ImageTransport::~ImageTransport()'
sr.cpp:(.text._ZN6SRNodeC2ERKN3ros10NodeHandleE[_ZN6SRNodeC5ERKN3ros10NodeHandleE]+0xd0b): undefined reference to `image_transport::ImageTransport::~ImageTransport()'
sr.cpp:(.text._ZN6SRNodeC2ERKN3ros10NodeHandleE[_ZN6SRNodeC5ERKN3ros10NodeHandleE]+0xd25): undefined reference to `image_transport::ImageTransport::~ImageTransport()'
CMakeFiles/swissranger_camera.dir/src/sr.cpp.o: In function `SRNode::~SRNode()':
sr.cpp:(.text._ZN6SRNodeD2Ev[_ZN6SRNodeD5Ev]+0x1d3): undefined reference to `image_transport::ImageTransport::~ImageTransport()'
sr.cpp:(.text._ZN6SRNodeD2Ev[_ZN6SRNodeD5Ev]+0x1e5): undefined reference to `image_transport::ImageTransport::~ImageTransport()'
CMakeFiles/swissranger_camera.dir/src/sr.cpp.o:sr.cpp:(.text._ZN6SRNodeD2Ev[_ZN6SRNodeD5Ev]+0x1f7): more undefined references to `image_transport::ImageTransport::~ImageTransport()' follow
CMakeFiles/swissranger_camera.dir/src/sr.cpp.o: In function `SRNode::getInitParams()':
sr.cpp:(.text._ZN6SRNode13getInitParamsEv[SRNode::getInitParams()]+0x1aa): undefined reference to `camera_info_manager::CameraInfoManager::CameraInfoManager(ros::NodeHandle, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
CMakeFiles/swissranger_camera.dir/src/sr.cpp.o: In function `SRNode::reconfig(swissranger_camera::SwissRangerConfig&, unsigned int)':
sr.cpp:(.text._ZN6SRNode8reconfigERN18swissranger_camera17SwissRangerConfigEj[SRNode::reconfig(swissranger_camera::SwissRangerConfig&, unsigned int)]+0x2fd): undefined reference to `tf::resolve(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
sr.cpp:(.text._ZN6SRNode8reconfigERN18swissranger_camera17SwissRangerConfigEj[SRNode::reconfig(swissranger_camera::SwissRangerConfig&, unsigned int)]+0x3a0): undefined reference to `camera_info_manager::CameraInfoManager::validateURL(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
sr.cpp:(.text._ZN6SRNode8reconfigERN18swissranger_camera17SwissRangerConfigEj[SRNode::reconfig(swissranger_camera::SwissRangerConfig&, unsigned int)]+0x3c8): undefined reference to `camera_info_manager::CameraInfoManager::loadCameraInfo(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
CMakeFiles/swissranger_camera.dir/src/sr.cpp.o: In function `SRNode::spin()':
sr.cpp:(.text._ZN6SRNode4spinEv[SRNode::spin()]+0x45): undefined reference to `camera_info_manager::CameraInfoManager::getCameraInfo()'
sr.cpp:(.text._ZN6SRNode4spinEv[SRNode::spin()]+0x5e7): undefined reference to `image_transport::Publisher::getNumSubscribers() const'
sr.cpp:(.text._ZN6SRNode4spinEv[SRNode::spin()]+0x616): undefined reference to `image_transport::Publisher::publish(sensor_msgs::Image_<std::allocator<void> > const&) const'
sr.cpp:(.text._ZN6SRNode4spinEv[SRNode::spin()]+0x62b): undefined reference to `image_transport::Publisher::getNumSubscribers() const'
sr.cpp:(.text._ZN6SRNode4spinEv[SRNode::spin()]+0x65a): undefined reference to `image_transport::Publisher::publish(sensor_msgs::Image_<std::allocator<void> > const&) const'
sr.cpp:(.text._ZN6SRNode4spinEv[SRNode::spin()]+0x66f): undefined reference to `image_transport::Publisher::getNumSubscribers() const'
sr.cpp:(.text._ZN6SRNode4spinEv[SRNode::spin()]+0x69e): undefined reference to `image_transport::Publisher::publish(sensor_msgs::Image_<std::allocator<void> > const&) const'
sr.cpp:(.text._ZN6SRNode4spinEv[SRNode::spin()]+0x6b3): undefined reference to `image_transport::Publisher::getNumSubscribers() const'
sr.cpp:(.text._ZN6SRNode4spinEv[SRNode::spin()]+0x6e2): undefined reference to `image_transport::Publisher::publish(sensor_msgs::Image_<std::allocator<void> > const&) const'
collect2: ld returned 1 exit status
make[2]: *** [/home/ktset/catkin_ws/devel/lib/swissranger_camera/swissranger_camera] Error 1
make[1]: *** [camera_drivers_experimental/swissranger_camera/CMakeFiles/swissranger_camera.dir/all] Error 2
make: *** [all] Error 2
CmakeList.txt :
cmake_minimum_required(VERSION 2.8.3)
project(swissranger_camera)
find_package(catkin REQUIRED COMPONENTS roscpp std_msgs genmsg)
catkin_package(
INCLUDE_DIRS include
LIBRARIES /usr/share/libmesasr
CATKIN_DEPENDS roscpp std_msgs dynamic_reconfigure sensor_msgs image_transport camera_info_manager driver_base tf
DEPENDS system_lib boost mesasr
)
include_directories(include ${catkin_INCLUDE_DIRS} mesasr)
add_executable(swissranger_camera src/sr.cpp src/dev_sr.cpp)
target_link_libraries(swissranger_camera mesasr ${catkin_LIBRARIES} ${Boost_LIBRARIES} /usr/share/libmesasr)
add_dependencies(swissranger_camera dynamic_reconfigure sensor_msgs image_transport camera_info_manager driver_base tf)`
Package.xml
<build_depend>std_msgs</build_depend>
<build_depend>image_transport</build_depend>
<build_depend>sensor_msgs</build_depend>
<build_depend>roscpp</build_depend>
<build_depend>tf</build_depend>
<build_depend>camera_info_manager</build_depend>
<build_depend>dynamic_reconfigure</build_depend>
<build_depend>driver_base</build_depend>
<build_depend>tf</build_depend>
<build_depend>libmesasr</build_depend>
<run_depend>image_transport</run_depend>
<run_depend>std_msgs</run_depend>
<run_depend>sensor_msgs</run_depend>
<run_depend>roscpp</run_depend>
<run_depend>tf</run_depend>
<run_depend>camera_info_manager</run_depend>
<run_depend>dynamic_reconfigure</run_depend>
<run_depend>driver_base</run_depend>
<run_depend>tf</run_depend>
<run_depend>libmesasr</run_depend>
this is the first time I leave my Question so dunno how to use that code function.
How can I fix it? any comments will helpful and thankful. Cheers
Asked by kaist.wook on 2013-12-22 16:30:40 UTC
Answers
Hope this helps: There are several problems with your CMakeLists.txt
.
The biggest one: You need to find_package
all the ROS packages you depend on. This is how the variables catkin_INCLUDE_DIRS
and catkin_LIBRARIES
are set up.
So do a
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
image_transport
sensor_msgs
tf
camera_info_manager
dynamic_reconfigure
driver_base
)
(best sort this alphabetically). Maybe this resolves your problem already.
Other issues:
- You shouldn't link against a library with the full path, but just against the library name minus the
lib
part, i.e.mesasr
- the
add_dependencies
call is not what you want. You need this if you need messages to be built before, but better use${<packagename>_EXPORTED_TARGETS}
or${catkin_EXPORTED_TARGETS}
- in
catkin_package
: TheLIBRARIES
part is not correct, this is only for exporting libraries that you build - in
catkin_package
: exchangemesasr
withlibmesasr
(the same name as in thepackage.xml
)
Also, there already exists a swissranger driver, have you checked out the OpenPTrack swissranger_camera package?
Asked by mgruhler on 2015-07-21 01:37:28 UTC
Comments
omg, just saw now, when this was actually asked... :-D just stumbled upon it due to the update to the question :-S
Asked by mgruhler on 2015-07-21 01:38:41 UTC
Doesn't matter: we try to answer all questions on ROS Answers, old or new. Only really outdated / no longer relevant questions get closed (but only rarely). So thanks for your contribution.
Asked by gvdhoorn on 2015-07-21 06:16:20 UTC
Comments