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

求助:如何编译不依赖VC++运行时的OpenCV 4.6.0

问题分析与解决方案

关于VS2022编译产物依赖VCRUNTIME140.dll的原因

VS2022对应的MSVC工具集版本是v143,但从VS2015开始,微软统一了VC++运行时的主版本号为14.x,后续所有VS版本(2017/2019/2022)的运行时都延续这个主版本,仅在小版本上迭代更新。所以你看到编译产物依赖VCRUNTIME140.dll是正常现象,这和VS2022的版本号17并不冲突。

让opencv_world460.dll不依赖动态VC++运行时的步骤

你之前取消勾选BUILD_WITH_STATIC_CRT是操作反了,这个选项的核心作用就是让OpenCV链接静态版本的VC++运行时,正确操作配合以下步骤即可解决问题:

  • 彻底清理CMake缓存:删除之前生成的build目录,重新创建空目录开始配置,避免旧设置残留干扰后续编译。
  • 在CMake-GUI中勾选BUILD_WITH_STATIC_CRT选项:该选项会强制OpenCV使用静态CRT,编译后产物将不再依赖动态的VCRUNTIMExxx.DLL。
  • 手动指定CMAKE_MSVC_RUNTIME_LIBRARY变量:如果BUILD_WITH_STATIC_CRT未生效,可直接在CMake的"Add Entry"中添加该变量,Release模式设置为MultiThreaded,Debug模式设置为MultiThreadedDebug,确保覆盖默认的动态CRT配置。
  • 检查第三方依赖模块:若开启了OpenCV的第三方依赖(如FFmpeg、IPP等),需确保这些模块也是用静态CRT编译的,或者直接禁用不需要的模块(比如取消勾选WITH_FFMPEG),否则第三方模块的动态CRT依赖会传递到最终的opencv_world.dll中。
  • 重新生成解决方案并编译:配置完成后点击"Generate"生成VS工程,用VS2022打开工程,选择对应Release/Debug模式完成编译。

编译完成后,可通过dumpbin /dependents opencv_world460.dll命令检查依赖列表,确认VCRUNTIMExxx.DLL已被移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:24:19