简体   繁体   English

构建错误:对 `cv_bridge::CvImage::toImageMsg() const' 的未定义引用

[英]Build error : undefined reference to `cv_bridge::CvImage::toImageMsg() const'

I am using ROS K.netic and trying to write a program that would read two videos and publish them on two different topics.我正在使用 ROS K.netic 并尝试编写一个程序来读取两个视频并将它们发布在两个不同的主题上。 But I think I've made some mistake in linking OpenCV libraries.但我认为我在链接 OpenCV 库时犯了一些错误。 I am getting the following errors.我收到以下错误。

CMakeFiles/src.dir/src/src.cpp.o: In function `main':
src.cpp:(.text+0x3fd): undefined reference to `cv_bridge::CvImage::toImageMsg() const'
src.cpp:(.text+0x56d): undefined reference to `cv_bridge::CvImage::toImageMsg() const'
collect2: error: ld returned 1 exit status
MultiCamImages/CMakeFiles/src.dir/build.make:165: recipe for target 'MultiCamImages/src' failed
make[2]: *** [MultiCamImages/src] Error 1
CMakeFiles/Makefile2:1089: recipe for target 'MultiCamImages/CMakeFiles/src.dir/all' failed
make[1]: *** [MultiCamImages/CMakeFiles/src.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed

This is my source file:这是我的源文件:

#include <ros/ros.h>
#include <cv_bridge/cv_bridge.h>
#include <image_transport/image_transport.h>
#include <sensor_msgs/image_encodings.h>

#include <opencv2/opencv.hpp>

#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char** argv){
    ros::init(argc, argv, "PublishMultiCamImages");

    ros::NodeHandle nh;

    image_transport::ImageTransport it(nh);
    image_transport::Publisher pub1 = it.advertise("/camera/image_raw1", 1);
    image_transport::Publisher pub2 = it.advertise("/camera/image_raw2", 1);

    cv::Mat im;
    cv::String Path1("/home/akanksha/COSLAM_Dataset/EA-01/grayscale/*.jpg");
    cv::String Path2("/home/akanksha/COSLAM_Dataset/EA-02/grayscale/*.jpg");

    //time = ros::Time::now();

    vector<cv::String> fn1;
    vector<cv::String> fn2;
    cv::glob(Path1,fn1, true); // recurse
    cv::glob(Path2,fn2, true);

    ros::Rate r(50);

    int l1 = fn1.size();
    int l2 = fn2.size();

    int count1 = 0, count2 = 0;
    bool flag;
    while(ros::ok()){
        flag = true;
        if(count1 < l1){
            cv::Mat image1 = cv::imread(fn1[count1]);
            sensor_msgs::ImagePtr msg1 = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image1).toImageMsg();
            pub1.publish(msg1);
            count1++;
            flag = false;
        }
        if(count2 < l2){
            cv::Mat image2 = cv::imread(fn2[count2]);
            sensor_msgs::ImagePtr msg2 = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image2).toImageMsg();
            pub2.publish(msg2);
            count2++;
            flag = false;
        }

        if(flag)
            break;

        r.sleep();
    }

    ros::shutdown();

    return 0;


}

This is my CMakeLists.txt这是我的 CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(MultiCamImages)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  image_transport
  OpenCV
)
# find_package(OpenCV REQUIRED)

set(OpenCV_LIBS opencv_core opencv_imgproc opencv_calib3d opencv_video opencv_features2d opencv_ml opencv_highgui opencv_objdetect)

add_executable(src src/src.cpp)
target_link_libraries(src ${catkin_LIBRARIES} ${OpenCV_LIBS})

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES MultiCamImages
#  CATKIN_DEPENDS roscpp
#  DEPENDS system_lib
)

include_directories(
  ${catkin_INCLUDE_DIRS}
)

And this is my pakage.xml这是我的包裹。xml

<?xml version="1.0"?>
<package>
  <name>MultiCamImages</name>
  <version>0.0.0</version>
  <description>The MultiCamImages package</description>

  <maintainer email="akanksha@todo.todo">akanksha</maintainer>

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <run_depend>roscpp</run_depend>
  <build_depend>sensor_msgs</build_depend>
  <run_depend>sensor_msgs</run_depend>
  <build_depend>cv_bridge</build_depend>
  <run_depend>cv_bridge</run_depend>

</package>

If you could point out the problem that would be a great help.如果您能指出问题,那将是一个很大的帮助。 Thanks!谢谢!

It doesn't look like you are linking cv_bridge in the cmake file. 看起来好像您在cmake文件中链接cv_bridge。 Maybe you want this: 也许您想要这样:

find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  roscpp
  image_transport
  OpenCV
)

Actually the way Joseph uses OpenCV libraries for linking is not right, since OpenCV does not belong to the standard package of ROS as with cv_bridge.实际上,Joseph 使用 OpenCV 库进行链接的方式是不正确的,因为 OpenCV 不属于 ROS 的标准 package,如 cv_bridge。 In this case, you need to separately use find_package for OpenCV as with boost like this:在这种情况下,您需要单独使用find_package for OpenCV 和 boost 一样,如下所示:

find_package(OpenCV REQUIRED)
# Or you may add specific major portion of OpenCV version, e.g., OpenCV3
find_package(OpenCV 3 REQUIRED)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误:对`cv::imread(std::string const&amp;, int)&#39;的未定义引用 - error: undefined reference to `cv::imread(std::string const&, int)' ROS cv_bridge::toCvCopy 因分段错误而失败 - ROS cv_bridge::toCvCopy fails with segmentation fault ndk-build 给我“错误:未定义的引用”到 cv::CascadeClassifier::load(std::string const&amp;) 即使在我链接库之后 - ndk-build giving me "error: undefined reference" to cv::CascadeClassifier::load(std::string const&) even after I link the libraries 未定义引用`cv :: error(int,std :: string const&,char const *,char const *,int)&#39; - undefined reference to `cv::error(int, std::string const&, char const*, char const*, int)' ROS cv_bridge C ++字符串中的ImagePtr转换 - ROS cv_bridge ImagePtr conversion in c++ string 按照初学者 cv_bridge 教程,不起作用 - Following the beginner cv_bridge tutorials, doesn't work OpenCV:对`cv :: namedWindow(cv :: String const&,int)&#39;的未定义引用 - OpenCV: undefined reference to `cv::namedWindow(cv::String const&, int)' OpenCV 未定义引用 `cv::imread(cv::String const&amp;, int)' - OpenCV undefined reference to `cv::imread(cv::String const&, int)' 访问cv_ptr-&gt; image时,类中的ROS cv_bridge导致segfault - ROS cv_bridge in a class leads to segfault when cv_ptr->image is accessed 未定义的引用cv :: inpaint - 错误1 - undefined reference to cv::inpaint - Error 1
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM