【问题标题】:OpenCV Visual Studio 2010 - RC6034 Error (DLL Hell?)OpenCV Visual Studio 2010 - RC6034 错误(DLL 地狱?)
【发布时间】:2011-04-30 08:27:57
【问题描述】:

[ 在图片链接的开头添加 HTTP:// 以使它们为您工作。 ] [这里的所有步骤都是在 Release 和 Debug 版本中完成的。显示的图片仅显示与调试相关的信息。 ]

OpenCV 2.1.0 在我的计算机上开始加载_使用 opencv_ffmpeg 动态链接库_的视频文件时,无法与我的计算机上的 Visual Studio 2010 一起正常工作。出现了许多问题,特别是在我尝试获取库等链接以供我在应用程序中使用时。我遇到的 99% 的错误我都解决了,保存一个:

i52.tinypic.com/2yxhmrq.jpg

错误文本:

R6034
An Application has made an attempt to load the C runtime library without using a manifest. This is an unsupported way to load Visual C++ DLLs. You need to modify your application to build with a manifest. For more information, please see the "Visual C++ Libraries a SHared Side-by-Side Assemblies" topic in the production documentation.

(Press Retry to debug the application)

中止 |重试 |忽视

此源代码产生的错误:

 #include <cv.h>
 #include <cxcore.h>
 #include <highgui.h>

 int main(int argc, char* argv[]) {
  cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );
  CvCapture* capture = cvCreateFileCapture( "Missile.avi" );
  IplImage* frame;
  while (1) {
   frame = cvQueryFrame( capture );
   if( !frame ) break;
   cvShowImage( "Example2", frame );
   char c = cvWaitKey(33);
   if( c == 27 ) break;
  }
  cvReleaseCapture( &capture );
  cvDestroyWindow( "Example2" );
 }

Missile.avi 位于应用程序的目录中(使用完整路径仍会产生相同的错误,因此不是 File-Not-Found 错误)。

这是我迄今为止所做的所有事情的清单:

  1. 尝试遵循 OpenCV Wiki (opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2010) 制定的指南。使用 VS2008 的预构建安装二进制文件对我不起作用。

  2. 经过大量的谷歌搜索和在线阅读,我看到人们在使用 CMake 从源代码进行 MAKE 操作后,通过自己编译库获得了成功。因此,我使用 CMake 2.8.2 (gui) 从头开始​​编译 OpenCV 2.1.0 以生成 Visual Studio 2010 OpenCV 解决方案。它是使用指定的 Cmake 选项生成的:BUILD_AS_SHARED_LIBS [YES]。该解决方案能够在 VS2010 中构建,并且在任何项目中均出现 0 次失败。

  3. 将所有适当的文件放入新的 Visual Studio 2010 属性表下的 VC++ 目录中: i53.tinypic.com/2mxlrpg.jpg i54.tinypic.com/2rcbl9j.jpg

  4. 保留调试所需的 Visual Studio“.pdb”文件。这是我简单地使用 OpenCV Wiki 中的已安装二进制文件时的初始错误之一 - 我需要拥有 .PDB 文件才能使用“调试”模式。 i56.tinypic.com/oh2tco.jpg

5a。完成第 4 项后,我可以毫无问题地使用以下基于 OpenCV 的代码:

    #include <cv.h>
    #include <cxcore.h>
    #include <highgui.h>

    int _tmain(int argc, _TCHAR* argv[])
    {
        IplImage *img = cvLoadImage("funny-pictures-cat-goes-pew.jpg");
        cvNamedWindow("Image:",1);
        cvShowImage("Image:",img);

        cvWaitKey();
        cvDestroyWindow("Image:");
        cvReleaseImage(&img);

        return 0;
    }

5b。当前的问题出现在我开始编译需要使用视频文件的代码时 - MOV、AVI、MP4 等(请参阅问题顶部的代码块)。由于链接了 VC++ 目录属性中的源代码,使用 LoadLibrary 函数的 cvwrap32.cpp 中的源代码似乎会导致错误:i51.tinypic.com/69kgg7.jpg

  1. 错误表明加载的库没有清单(如果我对上图中显示的错误的阅读是正确的)。因此,我确保每个库在最初使用 CMake 2.8.2 (gui) 生成并在 VS2010 中编译时都有一个“.manifest”文件。果然,每个库都有一个 (LibName).embed.manifest 和一个 (LibName)manifest.rc。我什至将它们移到了当前应用程序的 .PDB、Manifest 和 .ILK 文件所在的应用程序目录中。错误仍然表明我正在加载的库没有清单。

  2. 作为最后一次偏执的努力,我检查了 OpenCV VS2010 解决方案中的每个项目,以确保 /YES 为 Manifest Generation 启用。是的。

  3. 运行了一个depends.exe 依赖性测试。存在所有必需的 DLL(所有 msvcr90.dll 等)。

这就是我所得到的,在一切都陷入困境之前。我似乎无法纠正这个错误,因为 LoadLibrary 从 cvwrap32.cpp 调用的 opencv_ffmpeg210.dll 显然没有清单数据。

有人有什么想法吗?

计算机规格:Windows 7 Ultimate x86(32 位)。使用 Visual C++ 编译 Visual Studio 2010。

【问题讨论】:

  • 注意:检查导致中断和错误的 DLL 的名称。确实是“opencv_ffmpeg210d.dll”(去掉d,Release版也出现同样的问题)。
  • 看不出为什么有人 -1 这个。准确描述,所以 +1 甚至领域。

标签: visual-studio visual-studio-2010 visual-c++ opencv dll


【解决方案1】:

看到你的帖子后,我知道我没有发疯。通过 EHCI 头部跟踪器(谷歌夏季代码项目)运行 .avi 文件时,我遇到了几乎完全相同的问题。我能够很好地跟踪实时视频,但是在电影文件上运行代码会产生 R6403 错误。在某些情况下,我可以绕过错误并且代码可以正常工作(类似于所示的“一帧”案例)。我从源代码构建了我的 OpenCV,这使我从无法运行 hello-world 到能够运行它和 EHCI 示例代码。我不断寻找,最终找到了这个人的opencv_ffmpeg210d.dll文件:http://code.google.com/p/opencvthesis/source/browse/trunk/Capture_Estimator/Capture_Estimator/opencv_ffmpeg210d.dll?r=14

我替换了 Cmake/VisStudio 2010 生成的 dll(不确定,不是这个级别的编码专家)。瞧!现在 EHCI 可以处理视频文件而不会出现 R6403 错误消息。

我认为我应该传递解决方案。或许你们能从一开始就找出问题所在。

【讨论】:

    【解决方案2】:

    我建议您检查OpenCV-2.1.0 Visual C++ 2010 on Windows 7 以确保它有效。您似乎不必自己构建 OpenCV 二进制文件?

    【讨论】:

    • 我已经尝试过了。当我尝试使用 opencv_ffmpeg210d.dll 时它不起作用,这就是我必须自己构建库的原因。
    • @Jyoyi - 你对发布二进制文件有同样的问题吗(减去'd')?
    • 当我使用 Release 二进制文件时,它只会抛出一个错误(再次在同一 LoadLibrary 代码行中,出现访问冲突)。我也对 Release 进行了上述所有步骤和测试。
    • @Jyoti - 您为此尝试过 OpenCV wiki 吗?听起来他们的二进制文件有问题,也许其他人已经遇到了? VS2010 并不完全是一个边缘案例。
    • 我在 wiki 上找到了安装指南,但大量搜索(Google、in-wiki)并没有透露太多信息。我是在用尽所有选项后才来到 StackOverflow 的;对于大多数人来说,使用 Cmake 构建二进制文件似乎解决了他们所有的问题。对我来说,它最初是用我在上面的问题中提出的第二个代码块做的,它只创建了一个图像。当我想使用 OpenCV 处理 .AVI 视频时,问题就来了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2011-10-03
    • 2016-06-16
    相关资源
    最近更新 更多