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

Undefined reference to cv::Mat::Mat()

我制作了一个简单的 C++ 代码来读取网络摄像头图像并显示它。但是,当我编译时,出现错误 - 'Undefined reference to 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);
    }
}

我是这样编译的

g++ example.cpp `pkg-config --libs opencv4`

我不明白为什么会出现错误。感谢您的帮助!

这适用于我的 Linux:

g++ main.cpp -I/usr/include/opencv4/ -lopencv_core -lopencv_videoio -lopencv_highgui

虽然这不是可移植的,(使用 cmake 就可以了,但你需要先学习 cmake),我会提示你如何自己发现它。

每当您看到 Undefined reference to cv::Mat::Mat() 之类的错误时,请转到 https://docs.opencv.org/ , chose the newest version (here: https://docs.opencv.org/4.5.5/ 处的文档),在“搜索”window 中输入 class/function 的名称] linker 找不到(此处:Mat),请阅读定义它的 header(此处:#include<opencv2/core/mat.hpp>),然后丢失的库将具有名称 libopencv_core.*libopencv_mat.*。找到您机器中的任何一个(例如在 /user/lib 内)并 link 它,省略名称中的扩展名和开头 lib 。在我的例子中,带有完整路径的库位置是 /usr/lib/libopencv_core.so,所以我 link 它是 -lopencv_core。然后你需要用同样的方法找到剩余的库。

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