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

OpenCV头文件引入后无法链接函数:未定义引用问题求助

链接阶段错误:OpenCV cv::Mat 未定义引用

刚接触C++,尝试用OpenCV开发GUI程序,已在C盘安装CMake、Ninja和OpenCV。构建项目时,链接阶段出现错误,具体构建日志如下:

[main] Building folder: opencvtest 
[main] Configuring project: opencvtest 
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -SC:/opencvtest -Bc:/opencvtest/build -G Ninja
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Configuring done (0.2s)
[cmake] -- Generating done (0.1s)
[cmake] -- Build files have been written to: C:/opencvtest/build
[build] Starting build
[proc] Executing command: chcp
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/opencvtest/build --config Debug --target all --
[build] [1/1 100% :: 0.205] Linking CXX executable opencvtest.exe
[build] FAILED: opencvtest.exe 
[build] C:\Windows\system32\cmd.exe /C "cd . && C:\msys64\ucrt64\bin\c++.exe -g  CMakeFiles/opencvtest.dir/main.cpp.obj -o opencvtest.exe -Wl,--out-implib,libopencvtest.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -LC:/PROGRA~1/opencv/build/x64/vc16/lib -lopencv_world4100d  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
[build] C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/opencvtest.dir/main.cpp.obj: in function `main':
[build] C:/opencvtest/main.cpp:8: undefined reference to `cv::Mat::Mat()'
[build] C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/opencvtest/main.cpp:19: undefined reference to `cv::Mat::~Mat()'
[build] collect2.exe: error: ld returned 1 exit status
[build] ninja: build stopped: subcommand failed.
[proc] The command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/opencvtest/build --config Debug --target all -- exited with code: 1
[driver] Build completed: 00:00:00.360
[build] Build finished with exit code 1

我的CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.10)
project(opencvtest)

set(CMAKE_CXX_STANDARD 11)

# Specify the path to OpenCV headers
include_directories("C:/Program Files/opencv/build/include")

# Specify the path to OpenCV library directories
link_directories("C:/Program Files/opencv/build/x64/vc16/lib")

# Add the executable
add_executable(opencvtest main.cpp)

# Link against the OpenCV libraries
target_link_libraries(opencvtest opencv_world4100d)

main.cpp文件内容:

#include <stdio.h>
#include <opencv2/opencv.hpp>


int main(int argc, char** argv )
{

    cv::Mat image;
    /**image = imread("C:\\opencvtest\\1.jpg");
    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }**/
    //namedWindow("Display Image", WINDOW_AUTOSIZE );
    //imshow("Display Image", image);
    //waitKey(0);
    return 0;
}

已检查系统变量(opencv_version可输出版本号),IntelliSense能识别头文件(删除lib文件夹会出现波浪线)。


问题原因

当前使用的是MinGW编译器(日志中C:\msys64\ucrt64\bin\c++.exe),但安装的OpenCV是VC16(Visual Studio 2019)编译版本(路径C:/Program Files/opencv/build/x64/vc16/lib)。MinGW和MSVC的ABI(应用二进制接口)不兼容,导致链接时无法找到cv::Mat相关符号。

解决方案

方案1:更换为MSVC编译器

打开Visual Studio的开发者命令提示符,执行以下命令,使用MSVC编译器构建项目(与已安装的OpenCV版本兼容):

cmake -S C:/opencvtest -B C:/opencvtest/build -G "Visual Studio 16 2019" -A x64
cmake --build C:/opencvtest/build --config Debug

方案2:重新编译OpenCV(MinGW版本)

从OpenCV官方源码编译适配MinGW的版本:

  1. 下载OpenCV源码及可选的contrib扩展包。
  2. 用CMake配置生成MinGW项目,指定编译器为msys64的gcc/g++。
  3. 编译并安装后,在项目中链接该版本的OpenCV库。

方案3:优化CMakeLists.txt写法(配合方案1/2)

推荐使用find_package自动引入OpenCV,避免手动指定路径的错误:

cmake_minimum_required(VERSION 3.10)
project(opencvtest)

set(CMAKE_CXX_STANDARD 11)

# 自动查找OpenCV,需确保OpenCV_DIR环境变量指向安装目录的build文件夹
find_package(OpenCV REQUIRED)

add_executable(opencvtest main.cpp)

# 链接OpenCV库,自动包含所有必要的依赖
target_link_libraries(opencvtest ${OpenCV_LIBS})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:07:23