2012-06-07 3 views
5

우리는 Emgu opencv 래퍼 형태로 관리되지 않는 라이브러리를 사용하는 웹 응용 프로그램 (C# .NET)을 빌드하고 있습니다. 우리는 빌드를 32 비트 (x86)로 만들고 있으며, 32 비트 버전의 Emgu를 사용하고 있습니다.OpenCV 관리되지 않는 DLL을 찾을 수 없습니다 asp.net

지역 빌드에 좋은 일 모든

하지만, 우리의 웹 서버에 게시 할 때 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) 

출처 :

  • 는 별도의 디렉토리에 관리되지 않는 OpenCV의 DLL의를 넣고 경로 환경 변수에서이 디렉토리에 경로를 넣어 웹 서비스를 다시 시작합니다.
  • 는 서버 설정이 관리되지 않는 코드 실행을 허용하는지 여부를 테스트 (예)
  • 퍼팅 관리되지 않는 OpenCV의 DLL의을 System32 \의 inetsrv에와 SysWOW64와 \ inetsrv를 디렉토리
  • 퍼 팅 관리되지 않는 OpenCV의 DLL의 하위 디렉토리 '86'에서의 http://msdn.microsoft.com/en-us/library/ms366723.aspx

    모두의 이유는 다음 앞서 언급 한 폴더

나는이 이해 문제가, 그러나 나는 왜 경로 변수를 편집하여 Dll을 포함하는 올바른 경로를 포함하여 아무것도 해결하지 못하는지 이해하지 못합니다.

2008 년에 마지막으로 유용한 게시물이 있지만 아직 바보가 아닌 솔루션이 아직 제공되지 않아 모든 도움을 많이 받으실 수 있습니다!

+0

개발 컴퓨터에 DLL이 등록되어 있습니까? 즉 regsvr32를 통해 응용 프로그램 풀이 32BIT 모드로 실행되도록 설정되어 있습니까? –

+0

DLL은 개발 컴퓨터에 등록되어 있지 않으므로 (개발 및 웹 서버에서 상황이 동일하므로) 32 비트 응용 프로그램 (IIS7) – Arthur

+0

을 사용하도록 설정하면 응용 프로그램 풀은 opencv_core240.dll에 따라 다릅니다. 모든 DLL이 나열됩니다. 웹 서버에서 사용할 수 있습니까? –

답변

0

오류 설명과 이미 수행 한 검사에서 MSVCRT를 설치하지 않은 것으로 보입니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 MSVCRT가 웹 서버에 설치되어 있습니다. – Arthur

+0

bin 폴더 안에 x86 폴더를 만들고 opencv_core240.dll 및 다른 파일과 같은 opencv dll을 복사 해보십시오. 모듈을 찾을 수 없다는 오류를 해결할 수 있습니다. –

+0

이전에 언급 했어야 만 - 불행히도 행운이 없었습니다. – Arthur

2

opencv_core240.dll에 종속성이 있으므로 tbb.dll도 경로에 있는지 확인하십시오. tbc.dll은 opencv/build/common/tbb에서 찾을 수 있습니다.

+0

감사합니다. OpenCvSharp 2.4 (Emgu 대신 로컬 컴퓨터에서)와 동일한 문제가 있었으며 이로 인해 문제가 해결되었습니다. – Phasma

0

나는 며칠 전 같은 문제에 직면했지만, 나는 내 지식으로 모든 것을 시도했지만 그 문제를 해결하는 데 도움이되지는 못했다. EmguCV는 로컬 64 비트 Windows 8 PC에서 작동하지만 서버 (Windows Web Server 64 비트)에서는 정상적으로 작동합니다.

그러나 다음과 같이 좀 진정 임의 거즈를 한 후 문제가 해결되었습니다 서버는 비주얼 C를 가지고 ++ 2008 런타임 이전에 설치 한, 그러나 다시

  1. 내가 Visual C++ 2010 x86를 설치했습니다.
  2. Visual C++ 2008 x86 Runtime installation

수리하고 그 문제를 해결. 어떻게 이런 일이 일어 났는지 설명 할 수는 없지만 이틀 동안 무작위로 실험을하면 문제가 해결된다는 것이 기쁩니다.

1

필자의 경우 "npp32_xx_x.dll"(xx_x는 버전 번호가 아니며 32는 32 비트 아키텍처) 문제가 해결되었습니다. 그래서이 DLL을 프로젝트에 넣으려고하면 웹 애플리케이션에 win apps 및 equivalent 폴더를 넣을 수 있습니다. dll은 Nvidia Cuda NPP Library입니다.

0

nvcuda.dll을 웹 서버의 /bin 폴더에 넣으십시오. nvcuda.dll이어야합니다. x86 아키텍처은 서버와 같아야하며, 웹 서버가 xxx이면 웹 서버는 x64 아키텍처입니다.

향후 Dependence Walker http://www.dependencywalker.com/의 다른 종속성을 확인하고이 dll을 상위 라이브러리에 추가하십시오.

관련 문제