5

我们正在构建一个 Web 应用程序 (C# .NET),它使用 Emgu opencv 包装器形式的非托管库。我们强制构建为 32 位 (x86),并且我们使用的是 32 位版本的 Emgu。

所有这些在本地构建上都很好,但是当发布到我们的网络服务器时,openCV Dll(s) 无法加载:

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 和其他来源上发现的以下内容:

  • 将非托管 Opencv Dll 放在一个单独的目录中,并将该目录的路径放在 path 环境变量中,然后重新启动 web 服务。
  • 测试服务器配置是否允许非托管代码执行(是)
  • 将非托管 Opencv Dll 放在 system32\inetsrv 和 SysWOW64\inetsrv 目录中
  • 将非托管 Opencv Dll 放在前面提到的文件夹中的子目录“x86”中

我明白这一点:http: //msdn.microsoft.com/en-us/library/ms366723.aspx

是所有麻烦的原因,但是我不明白为什么编辑路径变量以包含包含 Dll 的正确路径并不能解决任何问题。

关于这个问题的最后一篇有用的帖子是在 2008 年,但是还没有提供万无一失的解决方案,因此非常感谢所有帮助!

4

5 回答 5

2

确保 tbb.dll 也在路径中,因为 opencv_core240.dll 对此有依赖关系。您可以在 opencv/build/common/tbb 下找到 tbb.dll。

于 2012-07-26T14:02:23.410 回答
1

就我而言,“npp32_xx_x.dll”(xx_x 是版本号,32 是 32 位架构)解决了这个问题。因此,您可以尝试将此 dll 放入您的项目中,用于 win 应用程序的放置文件夹和 Web 应用程序中的等效文件夹。该 dll 是 Nvidia Cuda NPP 库。

于 2012-08-13T14:34:26.427 回答
0

几天前我遇到了同样的问题,我尝试了我所知道的一切,但没有任何帮助解决这个问题。EmguCV 在我的本地 64 位 Windows 8 电脑上运行良好,但在服务器(Windows Web Server 64 位)上运行良好。

但是在我做了一些真正随机的事情后问题得到了解决,如下所示:服务器之前安装了 Visual C++ 2008 Runtime,但又一次

  1. 我安装了Visual C++ 2010 x86
  2. 已修复 Visual C++ 2008 x86 Runtime installation

这解决了问题。我无法解释这是怎么发生的,但我很高兴经过两天的随机实验后问题得到了解决。

于 2012-08-08T23:03:40.507 回答
0

要解决此问题,请放入Web 服务器上的文件夹中nvcuda.dll/bin确保nvcuda.dll必须x86 Architecture与服务器相同,或者 x64 如果 Web 服务器具有x64 Architecture

将来在 Dependence Walker 中查看其他依赖项http://www.dependencywalker.com/并将此 dll 与父库一起放置。

于 2013-06-27T20:32:06.073 回答
0

从您的错误描述和您已经执行的检查来看,您似乎还没有安装 MSVCRT。

于 2012-06-07T12:10:12.540 回答