C++使用OpenCV时出现undefined reference及头文件找不到错误如何解决
问题原因及解决方案
错误本质说明
- 第一次的「未定义引用」报错:你只配置了头文件搜索路径,没有链接OpenCV对应的功能库。C++编译分为编译、链接两个阶段,头文件仅提供函数声明,链接阶段需要加载对应库文件中的函数实现才能正常编译。
- 第二次的「文件不存在」报错:OpenCV内部头文件的相对路径都是以
opencv2/为根目录编写的,你修改头文件引入写法后没有给编译器指定/usr/include/opencv4作为头文件搜索根目录,编译器找不到内部引用的opencv2/core.hpp文件。
正确操作步骤
- 首先确认你已经安装了完整的OpenCV开发依赖,Debian/Ubuntu系系统可执行以下命令安装:
sudo apt install libopencv-dev pkg-config
- 头文件改回最初的写法,不要加
opencv4/前缀:
#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; }
- 编译命令使用pkg-config自动加载头文件路径和链接参数,避免手动配置出错:
g++ main.cpp -o main $(pkg-config --cflags --libs opencv4)
如果你的系统不想安装pkg-config,也可以手动补全链接参数:
g++ main.cpp -I/usr/include/opencv4 -lopencv_objdetect -lopencv_highgui -lopencv_imgproc -lopencv_videoio -lopencv_core
编译完成后执行./main即可运行程序。
内容的提问来源于stack exchange,提问作者saviu-u
相关产品推荐
相关产品推荐

