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

OpenCV加载已卸载CUDA 9.1 DLL报错,当前安装CUDA 8.0

解决CUDA版本切换后OpenCV依赖旧版DLL的问题

我刚碰到过几乎一模一样的情况,核心问题其实是你之前用的OpenCV是基于CUDA 9.1编译的,程序的二进制文件已经硬编码绑定了CUDA 9.1的动态库依赖,单纯换CUDA环境、改PATH根本改不了这个编译时的绑定。下面给你分步拆解解决办法:

问题本质

你的测试程序和OpenCV库本身,在编译阶段就已经和CUDA 9.1的cudart64_91.dll等库建立了依赖关系。哪怕你卸载了CUDA 9.1,运行时系统还是会按照编译时记录的依赖去寻找旧版本DLL,自然会报错。

具体解决方案

1. 先彻底清理并调整系统PATH

  • 右键「此电脑」→ 属性 → 高级系统设置 → 环境变量,找到系统变量里的Path:
    • 删掉所有和CUDA 9.1相关的路径(比如C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\bin)
    • 把CUDA 8.0的bin路径(默认是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin)拖到Path列表最顶端,确保Windows优先找新版本的DLL
  • 一定要重启电脑,PATH修改后必须重启才能完全生效,不然系统可能还缓存着旧路径

2. 重新编译适配CUDA 8.0的OpenCV

这是最彻底的解决办法——只有重新编译OpenCV,才能让它绑定CUDA 8.0的依赖库:

  1. 下载和你之前用的版本一致的OpenCV源码(避免API兼容问题)
  2. 打开CMake,设置好OpenCV源码路径和编译输出路径
  3. 在CMake配置界面:
    • 勾选WITH_CUDA选项
    • 指定CUDA_TOOLKIT_ROOT_DIR为你的CUDA 8.0安装路径(比如C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0)
    • 按需调整其他编译选项(比如是否要编译contrib模块)
  4. 点击Configure,选择Visual Studio 2013 Win64作为生成器,等配置完成
  5. 配置无误后点击Generate,生成VS2013工程文件
  6. 打开生成的工程,编译INSTALL目标(Debug和Release版本都要编译),完成后新的OpenCV就会绑定CUDA 8.0的库了

3. 更新VS项目的依赖配置

打开你的测试项目,在VS2013的属性里做这些修改:

  • VC++目录:
    • 包含目录:替换为CUDA 8.0的include路径(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include)和新编译的OpenCV的include路径
    • 库目录:替换为CUDA 8.0的lib\x64路径(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64)和新编译的OpenCV的lib路径
  • 链接器 → 输入:
    • 附加依赖项:确保引用的是CUDA 8.0的库(比如cudart.lib)和新编译的OpenCV库(比如opencv_world3xx.lib),删掉所有和CUDA 9.1相关的依赖

4. 清理Windows的DLL缓存

Windows会缓存DLL的查找路径,可能导致即使PATH改了还是找旧文件:

  • 以管理员身份打开命令提示符,运行:rundll32.exe advapi32.dll,ProcessIdleTasks,触发系统清理缓存
  • 或者打开「磁盘清理」工具,勾选「系统错误内存转储文件」和「临时文件」,清理缓存文件

你的测试代码与报错信息

测试代码

#include <iostream>
#include "opencv2/opencv.hpp"
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/cudaarithm.hpp"
using namespace cv;
int main(int argc, char* argv[]) {
    try {
        cv::Mat src_host = cv::imread("hdd.png", cv::IMREAD_GRAYSCALE);
        cv::cuda::GpuMat dst, src;
        src.upload(src_host);
        cv::cuda::threshold(src, dst, 128.0, 255.0, cv::THRESH_BINARY);
        cv::Mat result_host(dst);
        cv::namedWindow("Result", cv::WINDOW_NORMAL);
        cv::imshow("Result", result_host);
        cv::waitKey();
    } catch (const cv::Exception& ex) {
        std::cout << "Error: " << ex.what() << std::endl;
    }
    return 0;
}

报错信息

无法继续执行代码,因为找不到cudart64_91.dll。重新安装程序可能会解决此问题。

内容的提问来源于stack exchange,提问作者Schütze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:14:12