"undefined reference" 并包含在 C++ 中使用 OpenCV 时未找到的内容

"undefined reference" and includes not found when using OpenCV in C++

我是 C++ 的新手,我需要一些库方面的帮助

情况是这样的,

这个简单的代码:

#include <opencv2/objdetect.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <iostream>

int main() {
  cv::CascadeClassifier eye_detection;
  return 1;
}

编译

g++ main.cpp -I/usr/include/opencv4

returns我

/usr/bin/ld: /tmp/ccOsUApG.o: na função "main":
main.cpp:(.text+0x20): referência não definida para "cv::CascadeClassifier::CascadeClassifier()"
/usr/bin/ld: main.cpp:(.text+0x31): referência não definida para "cv::CascadeClassifier::~CascadeClassifier()"
collect2: error: ld returned 1 exit status

翻译成“未定义的引用”


我也尝试改变我写“includes”的方式

#include <opencv4/opencv2/objdetect.hpp>
#include <opencv4/opencv2/highgui.hpp>
#include <opencv4/opencv2/imgproc.hpp>
#include <opencv4/opencv2/videoio.hpp>
#include <iostream>

int main() {
  cv::CascadeClassifier eye_detection;
  return 1;
}

并编译:

g++ main.cpp

我有:

In file included from main.cpp:1:
/usr/include/opencv4/opencv2/objdetect.hpp:47:10: fatal error: opencv2/core.hpp: Arquivo ou diretório inexistente
   47 | #include "opencv2/core.hpp"
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.

转换为找不到文件


我检查了其他类似的问题,例如,但我已经这样做了,但没有成功

我想过直接把“opencv2”文件夹扔到“include”文件夹里,但好像不对,我怎样才能正确编译这段代码?

最后我弄明白了,我按照图书馆网站上的说明创建了 CMakeList 文件,但仍然没有用,所以我决定从系统的包管理器中卸载我的包,然后手动安装它,下载代码并编译它使用 cmake,它现在可以正常工作,即使我什么也没做(它可能只是更改了文件夹,而我之前无法正确指向它)

总之,cpp比我想象的要复杂得多,以后会多看看make和cmakes文件