[ 添加 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 :
尝试遵循 OpenCV Wiki (opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2010) 制定的指南。使用 VS2008 的预构建安装二进制文件对我不起作用。
经过大量谷歌搜索和在线阅读,我看到人们在使用 CMake 从源代码执行 MAKE 操作后,通过自己编译库获得了成功。因此,我使用 CMake 2.8.2 (gui) 从头开始编译 OpenCV 2.1.0 以生成 Visual Studio 2010 OpenCV 解决方案。它是使用指定的 Cmake 选项生成的:BUILD_AS_SHARED_LIBS [YES]。该解决方案能够在 VS2010 中构建,但在任何项目上都失败了 0。
将所有适当的文件放入新的 Visual Studio 2010 属性表下的 VC++ 目录中: i53.tinypic.com/2mxlrpg.jpg i54.tinypic.com/2rcbl9j.jpg
保留调试所需的 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
错误表明加载的库没有 list (如果我对上图中显示的错误的解读是正确的)。因此,我确保每个库在最初使用 CMake 2.8.2 (gui) 生成并在 VS2010 中编译时都有一个“.manifest”文件。果然,每个库都有一个 (LibName).embed.manifest 和一个 (LibName)manifest.rc。我什至将它们移动到当前应用程序的 .PDB、Manifest 和 .ILK 文件所在的应用程序目录中。错误仍然指出我正在加载的库没有 list 。
作为最后的偏执努力,我检查了 OpenCV VS2010 解决方案中的每个项目,以确保/YES 已为 list 生成打开。是的。
运行 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/