OpenCV x86缺少一些奇怪的DLL

时间:2019-11-27 13:23:31

标签: c++ opencv dll

我正在用C ++编写一个需要使用OpenCV x86的应用程序。我使用OpenCV 4.1.2,我使用CMake和Visual Studio 2019编译并构建了自己的文件。在配置/生成OpenCV文件的过程中,我没有使用opencv_contrib中的额外模块,因为这会导致OpenCV x86构建期间的错误数量。当我运行OpenCV x64(不需要自己构建)时,我没有收到任何错误,但是我确实需要使此应用程序为x86。

我已将include和lib路径添加到vs 2019 C ++解决方案中,并且添加了OpenCV_world412d.lib文件。在构建应用程序时,没有收到任何错误,但是在运行应用程序时,出现以下错误:The application was unable to start correctly (0xc000007b).我下载了依赖行者,令人惊讶的是,根据我的介绍,我丢失了数百个DLL依赖项遍历器(500个不同的DLL)。

当然,在这里显示我缺少的所有DLL是不可行的,但是有两个大类别和一些我缺少的DLL。请参阅下面的列表。

  • API-ms-win-*
  • DMENTERPRISEDIAGNOSTICS.DLL
  • EFSCORE.DLL
  • EMCLIENT.DLL
  • EXT-MS-*
  • IESHIMS.DLL
  • NGCRECOVERY.DLL
  • WFDSCONMGR.DLL
  • WPAXHOLDER.DLL

要查看我缺少的DLL的完整列表,请在这里找到它们:GitHub Gist

这是我用来测试OpenCV的代码

#include <string>
#include <vector>
#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    Mat image = Mat::zeros(300, 600, CV_8UC3);
    circle(image, Point(250, 150), 100, Scalar(0, 255, 128), -100);
    circle(image, Point(350, 150), 100, Scalar(255, 255, 255), -100);
    imshow("Display Window", image);
    waitKey(0);
    return 0;
}

不确定这是否与此问题有关。我正在使用Windows 10 64位笔记本电脑创建应用程序并运行依赖项遍历器。

希望我能提供有关此问题的足够信息,否则请说出来。

1 个答案:

答案 0 :(得分:0)

lib目录旁边,应该有一个包含OpenCV DLL的bin目录。正如评论中已经提到的那样,不幸的是,在官方网站上找到的Dependency Walker构建确实无法在Windows 10上正常运行。它报告的丢失DLL并不准确。

有多种方法可以获取有关错误0xc000007b的更多信息。首先,该错误应作为系统事件显示在Windows event log中,在该事件上单击该错误应该可以揭示出一些有关加载失败的详细信息。除此之外,还有一个标志可以设置为打开“加载器捕捉”。此标志的存在将使Windows加载程序根据加载过程中的实际情况打印调试输出。 here的更多内容。

启动应用程序时,必须先运行一个进程才能运行。创建进程时,Windows加载程序需要将您的.exe以及可能需要的所有DLL映射到进程的地址空间中。在.exe中,DLL通常是通过名称而不是完整路径来引用的。 Windows加载程序将跟随a quite elaborate search process来定位您的进程将使用的DLL。除非明确指示,否则bin目录旁边的lib目录将不是Windows加载程序搜索的目录之一。

默认情况下,加载程序将在其中查找DLL的第一个目录是包含当前正在加载的二进制文件的目录。加载程序还会在PATH环境变量中列出的目录中查找。解决此问题的两种常用方法是将所有必需的DLL复制到.exe文件所在的目录中,或者将包含DLL的目录添加到PATH环境变量中……