"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文件
我是 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文件