【问题标题】:Why can't my c++ program find the necessary .dll file?为什么我的 c++ 程序找不到必要的 .dll 文件?
【发布时间】:2011-02-08 14:50:59
【问题描述】:

我正在尝试使用 OpenCV(计算机视觉库),它似乎使用了一些位于 C:\OpenCV\bin(已添加到系统 PATH 变量中)的 .dll 文件。但是,如果我尝试运行一个简单的测试程序,则会出现系统错误:

程序无法启动,因为您的计算机缺少 highgui.dll。尝试重新安装程序以解决此问题。

如果我将highgui.dll 文件复制到system32 文件夹中,它可以工作,但我不想将所有必要的.dll 文件放在system32 文件夹中。

有谁知道为什么找不到 .dll 文件或我应该如何修复它?
(我已经检查了PATH 变量中的所有路径的有效性。)

【问题讨论】:

  • 欢迎来到 DLL 地狱。您不仅需要弄清楚 DLL 的位置,还必须找出要使用的 正确 版本。这就是许多应用程序将 DLL 与可执行文件放在同一目录中的原因。我建议您对 DLL 使用显式路径,而不是依赖系统路径(这可能导致 DLL 版本不正确)。
  • 我认为我不能编辑 DLL 的路径,因为它们可能在 OpenCV 库中指定。

标签: c++ dll path opencv system


【解决方案1】:

您是否尝试将 highgui.dll 复制到您的构建文件夹中。由于它是动态链接的,因此您的程序将在本地查找它,如果它没有被复制到您的构建目录中,它将无法找到它。

【讨论】:

  • 我正在使用 Netbeans,但在项目中没有看到构建文件夹(抱歉,我对构建等不太熟悉)。但是,OpenCV 的安装方式(使用 Windows 安装程序)还不能正常工作,这不是很奇怪吗?是否仍需要将文件移动到不同的位置?
【解决方案2】:

程序是如何启动的,PATH 变量是如何更新的?

如果您在命令窗口中更新路径,但从 IDE 或 Windows 桌面启动应用程序,则启动进程的环境可能与命令窗口的环境具有不同的 PATH 设置。

同样,如果您在系统控制面板小程序中更改 PATH,它可能不会影响在您进行 PATH 编辑之前启动的 IDE 或命令窗口。

【讨论】:

  • OpenCV的bin目录是在安装OpenCV的时候添加的。然后我在 Netbeans 中编写了一个简单的程序并启动它。所以PATH变量是在启动前设置的。
  • 澄清一下 - Netbeans 是在安装 OpenCV 之后启动的吗?
【解决方案3】:

我在运行并启动它之前跟踪了 Netbeans 构建的可执行文件,它没有给出任何错误(因此 Netbeans 可能使用自己的执行路径),所以试图找出如何让 Netbeans 搜索正确的路径对于 DLL,在添加环境变量 PATH=C:/OpenCV2.1/bin(项目属性 > 运行 > 环境)后,程序运行正常!
我确实希望这不是某种“意外”解决我的问题同时产生更严重副作用的黑客行为......
感谢您的帮助!

【讨论】:

  • 我知道我在评论一篇旧帖子,但我觉得这不是一个好的答案。我相信将DLL复制到可执行文件的目录而不是依赖于修改环境会更好。污染 PATH 的程序越多,情况就越糟糕......
【解决方案4】:

我将 OpenCV 2.2 与 Visual Studio 10 一起使用。要创建一个新项目,我执行以下步骤... 1.VC++目录->包含目录->C:\OpenCV2.2\include 库目录 -> C:\OpenCV2.2\lib 2.C/C++ -> 常规 -> 附加包含目录 ->C:\OpenCV2.2\bin 3.链接器->输入-> opencv_core220.lib;opencv_highgui220.lib;opencv_calib3d220.lib;opencv_contrib220.lib;opencv_features2d220.lib;opencv_ffmpeg220.lib;opencv_flann220.lib;opencv_gpu220.lib;opencv_imgproc220.lib;opencv_legacy220.lib;opencv lib;opencv_objdetect220.lib;opencv_ts220.lib;opencv_video220.lib;

  1. 我将所有 dll 文件复制到项目调试文件夹中。 它没有给我带来任何障碍,一切都很好..

【讨论】:

    【解决方案5】:

    我在使用 Visual Studio 12 时遇到了这个问题,在第十次检查以确保我的 PATH 中没有拼写错误之后,我注意到上一条路径的分号后面有一个空格。我删除了它,Visual Studio 能够找到我需要的 DLL。

    如果您在 PATH 变量中存储了多个路径,请确保它们用分号分隔,并且没有空格

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      相关资源
      最近更新 更多