Windows下的Qt配置pkg-config环境的解决方案!

本文介绍如何在Windows环境下使用pkg-config工具为Qt Creator配置OpenCV库,包括安装pkg-config所需组件、配置环境变量及调整OpenCV.pc文件等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【前言】
    我们都知道在Linux系统下配置完opencv环境后,Qt直接按照以下方式就可以直接调用了!这里我们采用的编译器是mingw32-make!
CONFIG += link_pkgconfig
PKGCONFIG += opencv  
    但在windows下面,要么在VS下配置include和lib目录,针对Qt Creator下的多数采用下面的方案:
INCLUDEPATH += D : \ opencv \ build \ include

LIBS += D : \ opencv - build \ bin \ libopencv_core320.dll
LIBS += D : \ opencv - build \ bin \ libopencv_highgui320.dll
LIBS += D : \ opencv - build \ bin \ libopencv_imgcodecs320.dll
LIBS += D : \ opencv - build \ bin \ libopencv_imgproc320.dll
LIBS += D : \ opencv - build \ bin \ libopencv_features2d320.dll
LIBS += D : \ opencv - build \ bin \ libopencv_calib3d320.dll
    如果只使用opencv或许没啥问题,但是往往我们还需要其它第三方的c++库,这时采用这样的方式,工程管理上比较混乱!随无伤大雅,但总觉得别扭!

针对这样的情况,我们往往采用两种方案,分别为Cmake和pkg-config这两种!CMake的确很优秀,但不自动管理Qt自己的内部库,相当于Qt库和第三方库一视同仁,都需要自己配置,这就尴尬了!一般比较复杂且需要跨平台部署的工程才建议使用cmake,平时也没必要自己折腾自己了!

于是下面讨论是pkg-config的方案!
On   http://sourceforge.net/p/mingw/mailman/message/31908633/   there are some instructions from earlier this year:
The FAQ pkg-config information did not work for me: these did: https://github.com/texane/stlink/issues/169
Download these three glib, pkg-config, pkg-config-dev archives and extract contents to C:\MinGW
I keep this unaccepted in case someone has a better answer.
最新的pkg-config是0.29的版本,这里是0.28的!pkg-config这个工具比较稳定了,更新频次比较少!0.28与0.29的区别不大,使用是没有问题的!

下载上面的三个工具,分别为glib,pkg-config,pkg-config-dev。将其放置到mingw的安装目录中!这里我使用的是Qt自带的mingw,你可以完全像我这样设置!

将其分别解压,目录结构分别为




将他们目录下文件夹分别拷贝到mingw的安装目录!

在lib目录下创建一个pkgconfig,用于放置opencv.pc文档!

我们最好再设置一下PKG_CONFIG_PATH


现在我们需要找到opencv.pc,将其复制过来并编辑配置一下!

将其拷贝到刚才的PKG_CONFIG_PATH所对应的目录下!
需要注意的是这个opencv.pc文档在widnows下需要修改一下,否则不好使用!
原本的opencv.pc的内容如下
# Package Information for pkg-config

prefix=D:/OpenCV/build/install
exec_prefix=${prefix}
libdir=${exec_prefix}/x86/mingw/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.3.1
Libs: -L${exec_prefix}/x86/mingw/lib -llibopencv_dnn331d.dll -llibopencv_ml331d.dll -llibopencv_objdetect331d.dll -llibopencv_shape331d.dll -llibopencv_stitching331d.dll -llibopencv_superres331d.dll -llibopencv_videostab331d.dll -llibopencv_calib3d331d.dll -llibopencv_features2d331d.dll -llibopencv_highgui331d.dll -llibopencv_videoio331d.dll -llibopencv_imgcodecs331d.dll -llibopencv_video331d.dll -llibopencv_photo331d.dll -llibopencv_imgproc331d.dll -llibopencv_flann331d.dll -llibopencv_core331d.dll
Libs.private: -lopengl32 -lglu32
Cflags: -I${includedir_old} -I${includedir_new}


这里我们可以看到上面有prefix,exec_prefix这样的变量,在windows下的pkg-config是无视他们的,都是默认到mingw的安装目录,因此我们需要改为绝对路径!这里设定你自己的目录就可以了!
# Package Information for pkg-config

libdir=D:/OpenCV/build/install/x86/mingw/lib
includedir_old=D:/OpenCV/build/install/include/opencv
includedir_new=D:/OpenCV/build/install/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.3.1
Libs: -LD:/OpenCV/build/install/x86/mingw/lib -llibopencv_dnn331d.dll -llibopencv_ml331d.dll -llibopencv_objdetect331d.dll -llibopencv_shape331d.dll -llibopencv_stitching331d.dll -llibopencv_superres331d.dll -llibopencv_videostab331d.dll -llibopencv_calib3d331d.dll -llibopencv_features2d331d.dll -llibopencv_highgui331d.dll -llibopencv_videoio331d.dll -llibopencv_imgcodecs331d.dll -llibopencv_video331d.dll -llibopencv_photo331d.dll -llibopencv_imgproc331d.dll -llibopencv_flann331d.dll -llibopencv_core331d.dll
Libs.private: -lopengl32 -lglu32
Cflags: -I${includedir_old} -I${includedir_new}


好了,pkg-config环境配置都完成了!

pro工程目录下添加
CONFIG += link_pkgconfig
PKGCONFIG += opencv  
就可以构建使用了!

这样我们就可以拥抱qmake了,无需需要cmake就可以开开心心的添加第三方库了!
<think>好的,用户遇到了OpenCV的错误提示:“error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support...”。我需要帮他解决这个问题。首先,我得回忆一下这个错误的常见原因。 这个错误通常发生在使用OpenCV的高层GUI功能时,比如cv2.namedWindow()或者imshow(),而系统缺少必要的GUI库支持。可能的原因是用户安装的OpenCV版本没有编译GTK或QT等图形界面支持,或者在安装时相关依赖没有正确配置。 接下来,我需要分步骤思考解决方案。首先,用户可能通过pip安装了预编译的OpenCV包(比如opencv-python),这些包通常不包含GUI支持,或者只支持部分后端。这时候需要重新从源码编译OpenCV,并确保启用了GTK或QT。 然后,用户可能是在Ubuntu或Debian系统上,所以按照错误提示的建议,安装libgtk2.0-dev和pkg-config可能有效。需要检查这些依赖是否安装,以及编译时的CMake配置是否正确启用了GTK。 另外,也有可能用户的系统缺少其他依赖库,比如libcanberra-gtk-module,这可能导致即使安装了GTK也无法正常使用。需要提醒用户安装这些包。 如果用户不想重新编译OpenCV,可以建议他们改用其他后端,比如QT,或者在无头环境中禁用GUI功能。例如,使用cv2.imwrite()保存图像而不是显示。 还要考虑到用户的环境可能不同,比如Windows、macOS或其他Linux发行版,可能需要不同的解决方法。例如,在Windows上可能需要安装GTK运行时库,或者使用Cocoa支持。 总结步骤应该是: 1. 安装缺失的依赖库。 2. 重新编译OpenCV并启用GUI支持。 3. 或者使用预编译的完整版包。 4. 替代方案:使用其他后端或避免GUI功能。 需要确保每一步都清晰,并给出具体的命令,比如在Ubuntu上安装依赖的命令,编译OpenCV时的CMake参数等。同时,提醒用户在编译前清理之前的构建文件,避免缓存问题。 可能还需要注意用户权限问题,比如是否使用sudo安装依赖,或者在虚拟环境中操作。此外,如果用户使用的是conda,可能也有不同的解决方法,但错误信息中提到的是Ubuntu/Debian,所以可能集中在apt包管理上。 最后,需要验证解决方案是否有效,例如运行一个简单的OpenCV脚本来创建窗口,确认错误是否消失。如果问题依旧,可能需要进一步检查CMake的输出,确认GTK是否被正确检测和启用。</think>这个错误是由于OpenCV的GUI模块(如`cvNamedWindow`)缺少图形界面依赖库导致。以下是分步解决方案: $\textcolor{green}{\textbf{方法1:Ubuntu/Debian系统快速修复}}$ 1. 安装GTK依赖 ```bash sudo apt update && sudo apt install libgtk2.0-dev pkg-config libcanberra-gtk-module ``` 2. 重装OpenCV(任选其一) - $\textcolor{blue}{\textit{方案A}}$:使用完整版预编译包 ```bash pip uninstall opencv-python pip install opencv-python-headless # 先卸载原有版本 pip install opencv-python # 安装完整版 ``` - $\textcolor{blue}{\textit{方案B}}$:源码编译安装 ```bash git clone https://github.com/opencv/opencv.git cd opencv && mkdir build && cd build cmake -D WITH_GTK=ON -D WITH_GTK_2_X=ON .. make -j$(nproc) sudo make install ``` $\textcolor{green}{\textbf{方法2:Windows系统解决方案}}$ 1. 安装[MSYS2](https://www.msys2.org/) 2. 通过pacman安装GTK3 ```bash pacman -S mingw-w64-x86_64-gtk3 ``` 3. 使用CMake编译时添加参数 ```bash cmake -D WITH_GTK=ON -D CMAKE_BUILD_TYPE=RELEASE .. ``` $\textcolor{green}{\textbf{方法3:通用替代方案}}$ 1. 使用Matplotlib代替显示 ```python import matplotlib.pyplot as plt plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.show() ``` 2. 禁用GUI功能(适用于服务器环境) ```python # 将代码中的cv2.imshow()替换为cv2.imwrite() cv2.imwrite("output.jpg", image) ``` $\textcolor{red}{\textbf{验证步骤}}$ ```python import cv2 img = cv2.imread("test.jpg") cv2.imshow("Test", img) # 应正常显示窗口 cv2.waitKey(0) cv2.destroyAllWindows() ``` $\textcolor{orange}{\textbf{常见问题排查}}$ 1. 检查CMake输出是否包含: ```bash -- GUI: -- GTK+: YES (ver 2.24.32) ``` 2. 如果使用虚拟环境,确认依赖库路径正确 3. 更新显卡驱动(NVIDIA用户需安装闭源驱动) $\textcolor{purple}{\textbf{扩展说明}}$:该错误源于OpenCV编译时未启用GUI支持。主流Linux发行版的软件仓库中OpenCV包通常默认包含GTK支持,但通过pip安装的`opencv-python-headless`版本移除了GUI模块以减小体积。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值