message_filters example code error
I get a huge error when just trying to compile this example code (http://wiki.ros.org/message_filters#E...) at 4.2 Example C++.
I am on Ubuntu 16.04 and I use ROS Kinetic
using namespace sensor_msgs; using namespace message_filters;
void callback(const ImageConstPtr& image, const CameraInfoConstPtr& cam_info) { // Solve all of perception here... }
int main(int argc, char** argv) {
ros::init(argc, argv, "vision_node");ros::NodeHandle nh;
message_filters::Subscriber<image> image_sub(nh, "image", 1);
message_filters::Subscriber<camerainfo> info_sub(nh, "camera_info", 1);
TimeSynchronizer<image, camerainfo=""> sync(image_sub, info_sub, 10);
sync.registerCallback(boost::bind(&callback, _1, _2));ros::spin();
return 0; }
The error message is huge:
CMakeFiles/listener.dir/listener.cpp.o: In function `callback(boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > const> const&, boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > const> const&)':
listener.cpp:(.text+0x52): undefined reference to `cv_bridge::toCvCopy(boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > const> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
listener.cpp:(.text+0x114): undefined reference to `cv::noArray()'
listener.cpp:(.text+0x167): undefined reference to `cv::minMaxLoc(cv::_InputArray const&, double*, double*, cv::Point_<int>*, cv::Point_<int>*, cv::_InputArray const&)'
listener.cpp:(.text+0x232): undefined reference to `cv::Mat::convertTo(cv::_OutputArray const&, int, double, double) const'
listener.cpp:(.text+0x284): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
listener.cpp:(.text+0x2ac): undefined reference to `cv::waitKey(int)'
CMakeFiles/listener.dir/listener.cpp.o: In function `main':
listener.cpp:(.text+0x7dc): undefined reference to `cv::namedWindow(cv::String const&, int)'
listener.cpp:(.text+0x7f0): undefined reference to `cv::startWindowThread()'
listener.cpp:(.text+0x818): undefined reference to `cv::destroyWindow(cv::String const&)'
CMakeFiles/listener.dir/listener.cpp.o: In function `cv::String::String(char const*)':
listener.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x54): undefined reference to `cv::String::allocate(unsigned long)'
CMakeFiles/listener.dir/listener.cpp.o: In function `cv::String::~String()':
listener.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): undefined reference to `cv::String::deallocate()'
CMakeFiles/listener.dir/listener.cpp.o: In function `cv::Mat::~Mat()':
listener.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39): undefined reference to `cv::fastFree(void*)'
CMakeFiles/listener.dir/listener.cpp.o: In function `cv::Mat::release()':
listener.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x4b): undefined reference to `cv::Mat::deallocate()'
CMakeFiles/listener.dir/listener.cpp.o: In function `message_filters::Synchronizer<message_filters::sync_policies::ExactTime<sensor_msgs::Image_<std::allocator<void> >, sensor_msgs::Image_<std::allocator<void> >, message_filters::NullType, message_filters::NullType, message_filters::NullType, message_filters::NullType, message_filters::NullType, message_filters::NullType, message_filters::NullType> >::disconnectAll()':
listener.cpp:(.text._ZN15message_filters12SynchronizerINS_13sync_policies9ExactTimeIN11sensor_msgs6Image_ISaIvEEES6_NS_8NullTypeES7_S7_S7_S7_S7_S7_EEE13disconnectAllEv[_ZN15message_filters12SynchronizerINS_13sync_policies9ExactTimeIN11sensor_msgs6Image_ISaIvEEES6_NS_8NullTypeES7_S7_S7_S7_S7_S7_EEE13disconnectAllEv]+0x43): undefined reference to `message_filters::Connection::disconnect()'
CMakeFiles/listener.dir/listener.cpp.o: In function `message_filters::Connection message_filters::Signal9<sensor_msgs::Image_<std::allocator<void> >, sensor_msgs::Image_<std::allocator<void> >, message_filters::NullType, message_filters::NullType, message_filters::NullType, message_filters::NullType, message_filters::NullType, message_filters::NullType, message_filters::NullType>::addCallback<boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > const> const&, boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > const> const&, boost::shared_ptr<message_filters::NullType const> const&, boost::shared_ptr<message_filters::NullType const> const&, boost::shared_ptr<message_filters::NullType const> const&, boost::shared_ptr<message_filters::NullType const> const&, boost::shared_ptr<message_filters::NullType const> const&, boost::shared_ptr<message_filters::NullType const> const&, boost::shared_ptr<message_filters::NullType const> const&>(boost::function<void (boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > const> const& ...