我们正在构建一个Web应用程序(C#.NET),它使用Emgu opencv包装器形式的非托管库。我们正在强制构建为32位(x86),我们正在使用32位版本的Emgu。
所有这些在本地构建上都很好用,但是当发布到我们的web服务器时,openCV Dll无法加载:
System.DllNotFoundException
Unable to load DLL 'opencv_core240': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
System.TypeInitializationException: The type initializer for 'Emgu.CV.CvInvoke' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'opencv_core240': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
at Emgu.CV.CvInvoke.cvRedirectError(CvErrorCallback errorHandler, IntPtr userdata, IntPtr prevUserdata)
at Emgu.CV.CvInvoke..cctor()
--- End of inner exception stack trace ---
at Emgu.CV.CvInvoke.cvCreateImageHeader(Size size, IPL_DEPTH depth, Int32 channels)
at Emgu.CV.Image`2.AllocateData(Int32 rows, Int32 cols, Int32 numberOfChannels)
at Emgu.CV.Image`2.set_Bitmap(Bitmap value)
at Emgu.CV.Image`2..ctor(Bitmap bmp)
我尝试了以下在stackoverflow和其他来源上找到的东西:
我明白这一点: http://msdn.microsoft.com/en-us/library/ms366723.aspx
是所有麻烦的原因,但是我不明白为什么编辑路径变量以包含包含Dll的正确路径并不能解决任何问题。
关于这个问题的最后一篇有用的帖子是在2008年,但是还没有提供任何万无一失的解决方案,所以所有的帮助都非常感谢!
答案 0 :(得分:2)
确保tbb.dll也在路径中,因为opencv_core240.dll依赖于此。你可以在opencv / build / common / tbb下找到tbb.dll。
答案 1 :(得分:1)
在我的情况下,“npp32_xx_x.dll”(xx_x是版本号,32是32位架构)解决了这个问题。 因此,您可以尝试将此dll放入您的项目输出文件夹中以获取应用程序和Web应用程序中的等效文件夹。 该DLL是Nvidia Cuda NPP图书馆。
答案 2 :(得分:0)
根据您已经执行的错误说明和检查,您似乎还没有安装MSVCRT。
答案 3 :(得分:0)
几天前我遇到了同样的问题,我在我的知识中尝试了一切,但没有任何帮助解决问题。 EmguCV在我的本地64位Windows 8 pc但服务器(Windows Web Server 64位)中运行良好。
但问题是在我做了一些真正随机的事情之后修复了如下: 服务器先前安装了Visual C ++ 2008 Runtime,但是再次
Visual C++ 2010 x86
。Visual C++ 2008 x86 Runtime installation
并解决了这个问题。我无法解释这是怎么发生的,但我很高兴在经过两天的随机实验后问题得到了解决。
答案 4 :(得分:0)
要解决此问题,请将nvcuda.dll
放在Web服务器上的/bin
文件夹中。请确保nvcuda.dll
必须 x86架构与服务器相同,或者如果Web服务器具有 x64架构,则为x64。
将来在Dependence Walker http://www.dependencywalker.com/
中看到其他依赖,并将这个dll与父库一起使用。