引入不同头文件时出现未定义引用错误的OpenCV代码运行问题
解决OpenCV代码引入不同头文件时的未定义引用错误
看起来你遇到的是典型的链接阶段错误——头文件只是提供函数/类的声明,真正的实现代码都在OpenCV的库文件里,没链接到对应库就会报"未定义引用"。结合你的代码,我给你梳理几个解决方向:
1. 确保编译命令正确链接所需库
你的代码用到了core、highgui、imgproc三个OpenCV模块,编译时必须把这三个库都链接进去。
如果用GCC编译,最简单的方式是用pkg-config自动获取编译和链接参数:
g++ CannyStill.cpp -o CannyStill `pkg-config opencv --cflags --libs`
如果是手动指定路径(比如pkg-config没配置好),要明确写出库路径和库名:
g++ CannyStill.cpp -o CannyStill -I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgproc
(注意把路径换成你自己的OpenCV安装路径)
2. 头文件与库版本必须匹配
别混用不同版本的OpenCV头文件和库!比如你代码里用的是opencv2/core/core.hpp这种新版结构,就不能去链接旧版OpenCV(比如1.x版本)的库,否则肯定会出现链接错误。
3. IDE环境下的配置要点
如果是用VS、Code::Blocks这类IDE开发,得在项目设置里手动配置:
- 包含目录:添加OpenCV的
include/opencv2所在的路径(比如D:\opencv\build\include) - 库目录:添加OpenCV的
lib路径(比如D:\opencv\build\x64\vc15\lib) - 附加依赖项:添加对应版本的库文件,比如Debug模式下加
opencv_core455d.lib、opencv_highgui455d.lib、opencv_imgproc455d.lib,Release模式下去掉后缀d。
额外提醒
你代码里的cv::命名空间使用是正确的,这点不用改;至于imread的路径问题,那是运行时加载图像的问题,和当前的"未定义引用"错误无关,等链接问题解决了再排查也不迟。
内容的提问来源于stack exchange,提问作者Travis
相关产品推荐
相关产品推荐

