对 cv::Mat::Mat() 的未定义引用

Abh*_*kar 4 c++ opencv g++

我编写了一个简单的 C++ 代码来读取网络摄像头图像并显示它。但是,当我编译时,出现错误 - '对 cv::Mat::Mat() 的未定义引用'。我不知道为什么它显示两个垫子。这是我的代码:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
#include <stdlib.h>

int main() {
    cv::VideoCapture cap(0);

    if (!cap.isOpened){
        std::cout << "Error opening camera" << std::endl;
    }

    cv::Mat img;
    
    while(1){
        cap >> img;
        cv::imshow("output", img);
        cv::waitKey(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我编译它的方式

g++ example.cpp `pkg-config --libs opencv4`
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会出现错误。任何帮助表示赞赏!

zko*_*oza 8

这适用于我的 Linux:

g++ main.cpp -I/usr/include/opencv4/ -lopencv_core -lopencv_videoio -lopencv_highgui
Run Code Online (Sandbox Code Playgroud)

虽然这不是可移植的(使用cmake可以解决问题,但您需要先学习 cmake),但我将提示您如何自己发现这一点。

每当您看到类似的错误时,请转到https://docs.opencv.org/Undefined reference to cv::Mat::Mat()上的文档,选择最新版本(此处:https: //docs.opencv.org/4.5.5/),然后在“搜索”窗口中,链接器找不到的类/函数的名称(此处:),读取定义它的标头(此处:),然后缺少的库将具有名称或. 找到您机器中的任何一个(例如 inside )并链接它,省略扩展名和名称开头。就我而言,库位置(具有完整路径)是,因此我将其链接到。然后需要用同样的方法找到剩下的lib。Mat#include<opencv2/core/mat.hpp>libopencv_core.*libopencv_mat.*/user/liblib/usr/lib/libopencv_core.so-lopencv_core

了解如何自动化此操作,例如通过MakefileCMakeLists.txt只是一个简单的 bash 脚本。