【问题标题】:OpenCV - DLL missing, but it's not?OpenCV - 缺少 DLL,但不是吗?
【发布时间】:2010-04-22 22:33:33
【问题描述】:

我正在尝试使用以下代码的 OpenCV 基本程序:

#include "cv.h"
#include "highgui.h"

int main()
{
    IplImage* newImg;
    newImg = cvLoadImage("~/apple.bmp", 1);
    cvNamedWindow("Window", 1);
    cvShowImage("Window", newImg);
    cvWaitKey(0);
    cvDestroyWindow("Window");
    cvReleaseImage(&newImg);
    return 0;
}

当我运行它时,我得到了

程序无法启动,因为 libcxcore200.dll 从您的 电脑。尝试重新安装 解决这个问题的程序。

但是,我可以看到这个 DLL。它存在。我已将以下内容添加到链接器的输入依赖项中

C:\OpenCV2.0\lib\libcv200.dll.a C:\OpenCV2.0\lib\libcvaux200.dll.a C:\OpenCV2.0\lib\libcxcore200.dll.a C:\OpenCV2.0\lib\libhighgui200.dll.a

什么给了?我正在使用 Visual Studio 2008。

当我链接 .dll 文件而不是 .dll.a 文件时,我得到了

致命错误 LNK1107:无效或损坏 文件:无法在 0x3F8 读取 libcv200.dll

【问题讨论】:

  • 你还没解决这个问题吗?

标签: c++ opencv


【解决方案1】:

我按照http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2010 上的说明进行操作,但仍然遇到完全相同的问题,所以这就是我解决它的方法。

  1. 获取 MSVC 2010 速成版。

  2. 获取 Win 32 OpenCV 2.2 二进制文件并安装在默认位置。

  3. 已创建新项目。

  4. 项目设置

    项目 -> OpenCV_Helloworld 属性...配置属性 -> VC++ 目录

    包括目录...添加:C:\OpenCV2.2\include\;

    图书馆目录...添加:C:\OpenCV2.2\lib;C:\OpenCV2.2\bin;

    源目录...添加:

    C:\OpenCV2.2\modules\calib3d\src;C:\OpenCV2.2\modules\contrib\src;C:\OpenCV2.2\modules\core\src;C:\OpenCV2.2\modules\features2d\src;C:\OpenCV2.2\modules\flann\src;C:\OpenCV2.2\modules\gpu\src;C:\OpenCV2.2\modules\gpu\src;C:\OpenCV2.2\modules\highgui\src;C:\OpenCV2.2\modules\imgproc\src;C:\OpenCV2.2\modules\legacy\src;C:\OpenCV2.2\modules\ml\src;C:\OpenCV2.2\modules\objdetect\src;C:\OpenCV2.2\modules\video\src;
    

    链接器 -> 输入 -> 附加依赖项...

    对于调试版本...添加:

    opencv_calib3d220d.lib;opencv_contrib220d.lib;opencv_core220d.lib;opencv_features2d220d.lib;opencv_ffmpeg220d.lib;opencv_flann220d.lib;opencv_gpu220d.lib;opencv_highgui220d.lib;opencv_imgproc220d.lib;opencv_legacy220d.lib;opencv_ml220d.lib;opencv_objdetect220d.lib;opencv_video220d.lib;
    

此时我以为我已经完成了,但是在调试模式下运行 exe 时遇到了您描述的问题。最后一步一看就明白了,选择:

链接器 -> 常规 ... 将“使用库依赖输入”设置为“是”

希望这会有所帮助。

【讨论】:

  • 执行此操作后,问题仍然存在。然后我重新启动了 MS Visual Studio 2010,然后它就可以工作了。
  • @ParagS.Chandakkar 您的评论应该是答案的一部分!
  • 我正在使用 Visual Studio RC 2017。在你们 5 年多之后,我遇到了同样的问题,作为答案的一部分,重新​​启动解决了我的问题。
【解决方案2】:

只需将C:\OpenCV2.0\bin 添加到您的PATH 环境变量中

或

安装 OpenCV 时,

选择选项Add OpenCV to the system PATH for current user 不是默认选项

【讨论】:

  • 它已经在我的路径中。我在安装时确实注意到了这个选项并选择了它。
  • @charles,很奇怪,我无法重现您的错误,您的示例代码在这里运行良好。只有我使用 mingw32-gcc 而不是 Visual Studio 2008 C++ 编译器。
  • 有趣。我真的不觉得这应该给我这个错误,因为它似乎不是一个常见的问题。令人困惑。
  • @charles,我刚刚尝试了 OpenCV 2.0 和 2.1,两者都在工作,所以也不是 OpenCV 版本问题。
  • @charles,因为OpenCV2.0\bin目录下的.dll都是32位编译的
【解决方案3】:

仅供参考,添加“PATH”后,对于我的win7,我需要重新启动它才能正常工作。

【讨论】:

  • 最后,重启帮助了我。
  • 一般只注销,不重启登录就够了
  • visual studio 2015 opencv 3.10 缺少 dll 问题在重启后解决:)
  • 值得指出的是,如果您在检查一切是否正常之前不想重新启动,那么以管理员身份打开您正在使用的程序通常也可以正常工作。但在重新启动之前,您始终需要以管理员身份打开,因此请记住这一点。
【解决方案4】:

在 Visual Studio 2013 中,您需要将其添加到 Environment Variables,然后将 Restart 添加到您的电脑。这是 .dll 文件所在的路径。

【讨论】:

    【解决方案5】:

    我在使用 opencv 时遇到了很多问题,并且在可怕的 4-6 个月后才成功。这是我遇到的最后一个问题,但以上所有方法均无效。对我有用的只是将 opencv_core2*.dll (以及它会要求的 opencv_highgui2*.dll ,因为你也包含它)复制并粘贴到发布(或调试文件夹 - 我假设。没有测试过这个) 项目的文件夹,您的应用程序文件所在的位置。

    希望这会有所帮助!

    【讨论】:

    • 你能弄清楚为什么更新环境路径变量没有帮助吗?
    • 我猜这是因为您 1. 更新路径后没有重新启动应用程序和/或 2. 路径变量不包含带有 dll 的文件夹。您必须确保您指向的 bin 文件夹包含 dll,并且它必须是链接器链接的正确版本的 dll。
    【解决方案6】:

    您只需要将所需的dll文件(或文件)的文件夹添加到系统“路径”中的“环境变量”中。 您的问题将 100% 得到解决。我也有这个问题。

    【讨论】:

      【解决方案7】:

      只需打开 bin 文件夹并将 .dll 文件复制并粘贴到您正在工作的文件夹中即可。它应该可以解决问题

      【讨论】:

        【解决方案8】:

        至于@Marc 的回答,我不认为VC 使用来自操作系统的路径。您是否将路径添加到 VC 的库路径。我通常将 DLL 添加到项目中,如果版本较新,则进行复制,这对我来说效果很好。

        【讨论】:

          【解决方案9】:

          您可以在 opencv\build\x86\vc12\bin 文件夹中找到 opencv_core248 和其他 dll。只需将所需的 dll 复制到 system32 文件夹中即可。您的应用程序应该立即开始工作!希望对您有所帮助。

          【讨论】:

          • 凤凰,这是一个可怕的想法。请停止为类似问题添加更多答案
          【解决方案10】:

          这可能就像复活一匹死马。但就是这样,这些类型问题的答案之所以简单地将dll放入system32文件夹中,是因为该文件夹位于操作系统的系统路径中。

          向操作系统提供路径链接实际上是最佳实践。

          Windows 10

          1. 打开文件资源管理器
          2. 右键单击“此电脑”并选择“属性”
          3. 现在在出现的“控制面板\系统和安全\系统”窗口中,单击左侧面板中的“高级系统设置”。
          4. 在下一个窗口的底部,单击“环境变量”按钮。
          5. 在下一个窗口中,有两个面板,上面的面板是为当前用户修改变量,下面的面板是为系统修改变量。在底部面板中,找到变量“Path”并单击以将其选中,然后单击“编辑”按钮。
          6. 然后您可以在此处创建、编辑、删除或更新系统的不同路径。例如,要将 mingw32-make 添加到系统,以便您可以通过命令提示符访问该命令,单击新建,然后粘贴到 bin 的路径。示例路径,“D:\Qt\Tools\mingw730_64\bin”,没有引号也没有额外的空格。
          7. 在所有窗口上单击“确定”以保存更改,然后重新启动您的计算机以加载更改。

          【讨论】:

            【解决方案11】:

            您的 DLL 文件末尾的“.a”是一个问题,因为您没有使用 CMAKE 构建 OpenCV 2.0。此外,您没有链接到 DLL 文件,而是链接到库文件,同样,您没有看到正确的库文件的原因是您没有使用 CMAKE 构建 OpenCV 2.0。如果您想使用 OpenCV 2.0,您必须构建它才能在 Visual Studio 中正常工作。如果您不想构建它,那么我建议您降级到 OpenCV 1.1pre,它是预先构建的,并且在 Visual Studio 中更加宽容。

            另一种选择(也是我推荐的)是放弃 OpenCV 并使用 EmguCV。我已经使用 OpenCV 大约一年了,当我切换到 EmguCV 时,事情变得容易多了,因为 EmguCV 与 .NET 一起工作,所以你可以使用像 C# 这样的语言,它不包含所有 C++ 包的指针、头文件、和内存分配问题。

            而关于 64bit vs. 32bit 的问题,OpenCV 官方并不支持 64bit。为了安全起见,打开您的项目属性并将“Build”选项卡下的“Platform Target”从“Any CPU”更改为“X86”。这应该在您使用 OpenCV 执行任何操作时完成,即使您使用的是 EmguCV 之类的包装器。

            【讨论】:

              【解决方案12】:

              从 System32 中的 /bin 复制所有 .dll

              【讨论】:

                【解决方案13】:

                只需将 .dll 文件复制到 C:\windows\system32\

                【讨论】:

                  【解决方案14】:

                  不需要这样做。这是视觉工作室错误。

                  去这里: http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=31354

                  并为您的计算机操作系统下载适当的修复程序

                  关闭 Visual Studio,运行修复程序,然后重新启动 VS

                  代码应该运行没有任何错误。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2016-08-01
                    • 2017-10-09
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-03-26
                    • 1970-01-01
                    相关资源
                    最近更新 更多