You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在VSCode中用MinGW编译OpenCV C++程序时出现undefined reference错误

问题:VS Code编译OpenCV C++程序出现undefined reference链接错误

我希望在Visual Studio Code中编写OpenCV C++程序,已编写测试代码如下:

#include <iostream>
#include <cstdlib>
#include <opencv2\opencv.hpp>

using namespace std;
using namespace cv;

int main(){
    Mat image = imread("image.png");
    
    while(true){
        imshow("live" , image);
        if(waitKey(0) == 'N') 
            break;
    }
    return 0;
}

已配置环境变量PATH,头文件路径为C:\msys64\mingw64\include\c++\13.2.0,tasks.json配置如下:

{"version": "2.0.0","tasks": [{"label": "OpenCV","type": "shell","command": "g++","args": ["-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe","-I","C:\\OpenCV-MinGW-Build-OpenCV-3.4.8-x64\\include","-L","C:\\OpenCV-MinGW-Build-OpenCV-3.4.8-x64\\x64\\mingw\\bin","-llibopencv_calib3d348","-llibopencv_core348","-llibopencv_dnn348","-llibopencv_features2d348","-llibopencv_flann348","-llibopencv_highgui348","-llibopencv_imgcodecs348","-llibopencv_imgproc348","-llibopencv_ml348","-llibopencv_objdetect348","-llibopencv_photo348","-llibopencv_stitching348","-llibopencv_video348","-llibopencv_videoio348"],"group": "build"},{"type": "cppbuild","label": "C/C++: g++.exe build active file","command": "C:\\msys64\\mingw64\\bin\\g++.exe","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."}]}

在终端执行命令g++ .\test.cpp -o .\test.exe时,出现undefined reference类链接错误。请问该如何解决?是否需要编写Makefile或使用CMake?


解决方法

1. 直接使用VS Code中配置好的OpenCV任务编译

你已经在tasks.json中配置了名为OpenCV的编译任务,该任务包含了编译OpenCV程序所需的所有头文件路径、库路径和链接参数。操作步骤:

  • 打开VS Code,按下Ctrl+Shift+B
  • 在弹出的任务列表中选择OpenCV任务,等待编译完成即可。

2. 终端手动编译时补充完整参数

你直接执行的g++ .\test.cpp -o .\test.exe命令只完成了编译步骤,没有指定OpenCV的头文件目录、库目录以及需要链接的库,所以链接阶段找不到OpenCV函数的实现。需要执行完整的编译命令:

g++ -g .\test.cpp -o .\test.exe -I "C:\OpenCV-MinGW-Build-OpenCV-3.4.8-x64\include" -L "C:\OpenCV-MinGW-Build-OpenCV-3.4.8-x64\x64\mingw\bin" -llibopencv_core348 -llibopencv_highgui348 -llibopencv_imgcodecs348

提示:不需要链接所有OpenCV库,只需要链接代码中用到的库即可。你的测试代码用到了core(核心功能)、highgui(窗口显示)、imgcodecs(图片读取),这三个库足够。

3. 关于Makefile或CMake的选择

  • 小项目/快速验证:可以写简单的Makefile简化编译操作,避免每次输入冗长命令。示例Makefile:

    CC = g++
    CFLAGS = -g -I"C:\OpenCV-MinGW-Build-OpenCV-3.4.8-x64\include"
    LDFLAGS = -L"C:\OpenCV-MinGW-Build-OpenCV-3.4.8-x64\x64\mingw\bin" -llibopencv_core348 -llibopencv_highgui348 -llibopencv_imgcodecs348
    TARGET = test.exe
    SOURCES = test.cpp
    
    all: $(TARGET)
    
    $(TARGET): $(SOURCES)
        $(CC) $(CFLAGS) $(SOURCES) -o $(TARGET) $(LDFLAGS)
    
    clean:
        del $(TARGET)
    

    保存为Makefile后,在终端执行make即可完成编译,执行make clean可删除生成的exe文件。

  • 中大型项目:推荐使用CMake,它能更好地管理依赖和编译流程,跨平台兼容性更强。示例CMakeLists.txt:

    cmake_minimum_required(VERSION 3.10)
    project(OpenCVTest)
    
    set(CMAKE_CXX_STANDARD 11)
    # 指定OpenCV安装路径
    find_package(OpenCV REQUIRED PATHS "C:/OpenCV-MinGW-Build-OpenCV-3.4.8-x64/x64/mingw")
    
    add_executable(test test.cpp)
    target_link_libraries(test ${OpenCV_LIBS})
    

    操作步骤:

    1. 在项目目录下创建build文件夹
    2. 进入build文件夹,执行cmake .. -G "MinGW Makefiles"
    3. 执行make完成编译

内容的提问来源于stack exchange,提问作者ninjabattery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:35:01