我们正在构建一个 Web 应用程序 (C# .NET),它使用 Emgu opencv 包装器形式的非托管库。我们强制构建为 32 位 (x86),并且我们使用 Emgu 的 32 位版本。
所有这些在本地构建上都运行良好,但是当发布到我们的网络服务器时,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 和其他来源上找到的以下内容:
- 将非托管 Opencv Dll 放在单独的目录中,然后将
将路径添加到环境变量path中,然后重启
网络服务。
- 测试服务器配置是否允许非托管代码
执行(是)
- 将非托管 Opencv Dll 放入 system32\inetsrv 中并
SysWOW64\inetsrv 目录
- 将非托管 Opencv Dll 放在子目录“x86”中
前面提到的文件夹
我的理解是:http://msdn.microsoft.com/en-us/library/ms366723.aspx
是所有麻烦的原因,但是我不明白为什么编辑路径变量以包含包含 Dll 的正确路径并不能解决任何问题。
关于这个问题的最后一篇有用的文章是在 2008 年,但是目前还没有提供万无一失的解决方案,因此非常感谢所有的帮助!
确保 tbb.dll 也在路径中,因为 opencv_core240.dll 对此有依赖性。你可以在opencv/build/common/tbb下找到tbb.dll。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)