VSCode + MinGW + vcpkg 装 OpenCV 踩坑记:为啥最后还是装了 VS2022?
哪怕你全程用 MinGW 写代码、编译项目,只要用 vcpkg 装复杂的库(比如 OpenCV、Boost、Qt),大概率还是需要 MSVC 来编译依赖—— 这不是你的问题,是 vcpkg 生态的现状。很多人一开始和我一样,觉得「我都用 MinGW 了,再装 VS2022 不是多此一举吗?VS2022 Build Tools 只是后台工具,你不用打开它,甚至不用知道它在哪。你写代码还是用 VS C
目录
VSCode + MinGW + vcpkg 装 OpenCV 踩坑记:为啥最后还是装了 VS2022?
第四幕:解决方案:借个灶台(装 VS2022 Build Tools)
步骤 4:在 VSCode 里配置 MinGW 链接 OpenCV
最后:装 VS2022 不是放弃 MinGW,是「强强联合」
书接上文,咱们说要做一道「OpenCV 图像识别红烧肉」,食材(代码)、菜谱(CMake)、采购员(vcpkg)都备齐了,甚至连电磁炉(MinGW)都搬出来了 —— 结果,锅炸了。
今天就给大家唠唠我这次踩的大坑,以及最后是怎么靠「借灶台」把这道菜做出来的。
第一幕:信心满满地开始,然后直接卡壳
我的初始配置
- 写代码:VS Code(我的菜谱笔记本)
- 编译器:Qt 自带的 MinGW(我的电磁炉)
- 包管理:vcpkg(我的食材供应商)
- 目标菜:安装 OpenCV,做个简单的图像识别
我当时的操作
我对着教程,自信满满地敲下了命令:
vcpkg install opencv:x64-mingw-static
(心里还想:看,我多专业,特意指定了 MinGW 的 64 位静态库版本!)
然后,报错来了
Error: Could not find Visual Studio instance.
Please install Visual Studio 2022 or 2019 with C++ workload.
我当时就懵了:
我用 MinGW 编译,你找 VS2022 干嘛?!不是说好电磁炉就能做饭吗?!
第二幕:我以为是 vcpkg 针对我,后来发现是我太天真
我尝试的「野路子」
- 强行指定 MinGW 路径:改了 vcpkg 的环境变量,告诉它「我有 MinGW,别找 VS 了」—— 没用,还是报错。
- 下载预编译的 OpenCV:去 GitHub 找了别人编译好的 MinGW 版 OpenCV—— 结果版本不对,和我的项目不兼容。
- 手动编译 OpenCV:跟着教程用 CMake+MinGW 编译 OpenCV—— 编译了 2 小时,最后报错「缺少依赖库」。
就在我快要放弃的时候,我去翻了 vcpkg 的官方文档,然后看到了一句让我醍醐灌顶的话:
Many libraries in vcpkg require MSVC to build their dependencies, even if you're targeting MinGW.
翻译成人话就是:
哪怕你最后用电磁炉(MinGW)炒菜,我 vcpkg 准备食材(编译依赖库)的时候,还是得用灶台(MSVC)—— 有些食材,电磁炉处理不了。
第三幕:原来问题出在这:vcpkg 的「双重标准」
用厨房的话讲明白
咱们再把场景拉回厨房:
- 你要做「OpenCV 红烧肉」,需要用到「高压锅」(OpenCV 库)。
- vcpkg 这个采购员说:「我可以给你高压锅,但我得先把它组装起来。」
- 组装高压锅需要「电焊机」(MSVC 编译器)—— 你的电磁炉(MinGW)虽然能炒菜,但焊不了高压锅。
- 更麻烦的是:高压锅还有 20 个零件(依赖库),其中 5 个零件必须用电焊机(MSVC)才能加工。
技术层面的真相
vcpkg 里的很多第三方库(比如 OpenCV 依赖的zlib、libpng、protobuf),它们的构建脚本默认是为 MSVC 设计的。哪怕你指定了 MinGW 的 triplet,vcpkg 在编译这些依赖库的时候,还是会优先找 MSVC——不是 vcpkg 针对你,是这些库的作者只给 MSVC 写了靠谱的构建脚本。
第四幕:解决方案:借个灶台(装 VS2022 Build Tools)
既然必须用 MSVC,那咱们就装一个 —— 但不用装完整的 VS2022 IDE,只装「Build Tools」就行,相当于只借灶台,不搬整个厨房。
步骤 1:下载 VS2022 Build Tools
去微软官网下载「Visual Studio 2022 Build Tools」(免费的!):https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022
步骤 2:安装时勾选关键组件
打开安装程序,只勾选「使用 C++ 的桌面开发」,右边的可选组件里,确保以下几项是勾上的:
- MSVC v143 - VS 2022 C++ x64/x86 生成工具
- Windows 10 SDK(或 Windows 11 SDK,看你系统)
- CMake tools for Visual Studio
然后点击「安装」—— 大概 10 分钟就能装完。
步骤 3:重新用 vcpkg 安装 OpenCV
装完 Build Tools 后,不用打开它,直接回到终端,重新敲命令:
vcpkg install opencv:x64-mingw-static
这次你会看到:
- vcpkg 先自动找到 MSVC,用它编译 OpenCV 的依赖库(zlib、libpng 这些)。
- 依赖库编译完后,再用 MinGW 编译 OpenCV 本身。
- 大概 10-20 分钟(看你电脑配置),最后显示「安装成功」!
步骤 4:在 VSCode 里配置 MinGW 链接 OpenCV
在你的CMakeLists.txt里,加上 vcpkg 的工具链文件,然后正常链接 OpenCV:
# 开头加上vcpkg工具链
set(CMAKE_TOOLCHAIN_FILE "D:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE STRING "")
project(ImageRecognition)
# 找到OpenCV
find_package(OpenCV REQUIRED)
# 添加可执行文件
add_executable(${PROJECT_NAME} main.cpp)
# 链接OpenCV库
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
然后在 VSCode 里用 MinGW 编译,完美运行!
第五幕:避坑总结:这 3 个错别再犯
错 1:以为「用 MinGW 就不用装 VS」
哪怕你全程用 MinGW 写代码、编译项目,只要用 vcpkg 装复杂的库(比如 OpenCV、Boost、Qt),大概率还是需要 MSVC 来编译依赖—— 这不是你的问题,是 vcpkg 生态的现状。
错 2:vcpkg 的 triplet 没选对
用 MinGW 的话,安装库时必须指定 MinGW 专属的 triplet:
- 64 位静态库(推荐):
x64-mingw-static - 64 位动态库:
x64-mingw-dynamic - 32 位:
x86-mingw-static/x86-mingw-dynamic
千万别用成x64-windows—— 那是给 MSVC 用的,MinGW 链接不上!
错 3:手动编译 OpenCV(新手劝退)
新手别尝试手动用 CMake+MinGW 编译 OpenCV—— 依赖库太多,很容易编译失败,浪费时间。相信我,vcpkg+VS2022 Build Tools 是最省心的方案。
最后:装 VS2022 不是放弃 MinGW,是「强强联合」
很多人一开始和我一样,觉得「我都用 MinGW 了,再装 VS2022 不是多此一举吗?」—— 其实不是:
- VS2022 Build Tools 只是后台工具,你不用打开它,甚至不用知道它在哪。
- 你写代码还是用 VS Code,编译项目还是用 MinGW。
- 它只是在 vcpkg 需要的时候,默默提供一下 MSVC 编译器,帮你把依赖库编译好。
这就像:
你平时在家用电磁炉(MinGW)炒菜,但偶尔需要加工一些特殊食材,就得去楼下的餐馆借他们的灶台(MSVC)—— 借完之后,你还是回家用电磁炉炒菜,不影响你什么。
现在,我的「OpenCV 图像识别红烧肉」已经成功出锅了,你也赶紧去试试吧!如果还有问题,欢迎在评论区留言,咱们一起踩坑一起解决~
更多推荐
所有评论(0)