visual-studio - OpenCV Visual Studio 2010 - RC6034 错误(DLL hell ?)

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

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

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

i52.tinypic.com/2yxhmrq.jpg

错误文本:

R6034<br/>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.<br/><br/> (Press Retry to debug the application)

Abort | Retry | Ignore

此源代码产生错误:

 #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 位于应用程序的目录中(使用完整路径仍会产生相同的错误,因此它不是文件未找到错误)。

这是我到目前为止所做的一切的 list :

  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++ Directories 属性中链接源代码,cvwrap32.cpp 中使用 LoadLibrary 函数的源代码似乎导致错误:i51.tinypic.com/69kgg7.jpg

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

  2. 作为最后的偏执努力,我检查了 OpenCV VS2010 解决方案中的每个项目,以确保/YES 已为 list 生成打开。是的。

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

这就是我所能得到的,在一切都变得糟糕之前。我似乎无法更正此错误,因为 LoadLibrary 从 cvwrap32.cpp 调用的 opencv_ffmpeg210.dll 显然没有 list 数据。

有人有什么想法吗?

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

最佳答案

看到您的帖子后,我知道我不会发疯。通过 EHCI head tracker(谷歌代码项目之夏)运行 .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 错误消息。

我想我应该传递解决方案。也许你们可以首先找出问题所在。

关于visual-studio - OpenCV Visual Studio 2010 - RC6034 错误(DLL hell ?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4017190/

相关文章:

configuration - 像 resharper 一样在 Visual Studio 中自动添加关闭引号

c# - 在读取SQL#的SQLite数据库上实现进度条

c# - 如何与 C# 共享 Visual C++ DLL 中的类?

c# - 如何在 Windows 机器上制作虚拟扩展屏幕?

visual-studio - Visual Studio 中缺少片段

c# - 阅读器关闭时调用 MetaData 的尝试无效?

visual-studio - 如何在 Visual Studio 中使用 Rational Team Concert 配置 Visual Studio 代码合并工具?

visual-studio - 如何绑定(bind)动态资源并指定路径

jquery - 当 JavaScript 和 VSDOC 文件不是本地时,如何通过 CDN 获得 IntelliSense 支持?

c++ - 编译cpp-netlib v0.9时 Unresolved external symbol 错误