【发布时间】: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 错误)。
这是我迄今为止所做的所有事情的清单:
尝试遵循 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++ 目录属性中的源代码,使用 LoadLibrary 函数的 cvwrap32.cpp 中的源代码似乎会导致错误:i51.tinypic.com/69kgg7.jpg
错误表明加载的库没有清单(如果我对上图中显示的错误的阅读是正确的)。因此,我确保每个库在最初使用 CMake 2.8.2 (gui) 生成并在 VS2010 中编译时都有一个“.manifest”文件。果然,每个库都有一个 (LibName).embed.manifest 和一个 (LibName)manifest.rc。我什至将它们移到了当前应用程序的 .PDB、Manifest 和 .ILK 文件所在的应用程序目录中。错误仍然表明我正在加载的库没有清单。
作为最后一次偏执的努力,我检查了 OpenCV VS2010 解决方案中的每个项目,以确保 /YES 为 Manifest Generation 启用。是的。
运行了一个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