문제

나는 ffmpeg (libavcodec, libavformat, libavutil & swscale)를 정적으로 연결하는 C ++/CLI 실행 파일을 구축하려고합니다. 정상적으로 구축하면 ( /CLR없이, CLR 지원이 없음) 작동하면 작동합니다. 그러나 CLR 지원을 추가하면 0xc000007b로 시작하지 않습니다. 그래도 "Hello World"C ++/CLI 앱은 잘 실행됩니다.

아마도 부스트 :: 스레드에서도 같은 일이 발생하지만 ffmpeg는 순수한 C이기 때문에 부스트를 사용하고 있다고 의심합니다.

내 구성 :

  • Visual Studio 2008 Professional SP1
  • Windows XP Pro SP3 (X86)
  • .NET 프레임 워크 3.5 SP1

고마워요, 로버트

도움이 되었습니까?

해결책

부스트를 사용하지는 않지만 스레드와 스레드 로컬 스토리지를 사용하여 동일한 문제로 이어질 수 있습니다. CLR은 __declSpec (스레드)와 호환되지 않습니다. FFMPEG 코드를 기꺼이 수정하지 않는 한 간단한 작업 어라운드가 없다고 생각합니다 (예 : Google 예제의 키워드 : CLR, __DECLSPEC (THREAD)).

다른 프로세스에서 FFMPEG를 분리하고 일부 의사 소통 수단을 사용하는 것이 좋습니다.

다른 팁

지시 된 비슷한 문제를 보았습니다. 솔루션은 결국 스레드 아파트 유형과 관련이있었습니다. .NET 2.0 이상에서 기본 스레드 아파트 유형은 STA에서 MTA로 전환되었습니다. 일부 기본 C ++ 객체는 MTA를 지원하지 않습니다. 실을 산란하고 수동으로 아파트 유형을 STA로 설정하여 성공했습니다. STA를 지원하지 않는 네이티브 C ++ 객체와의 간공 된 통신은 객체를 인스턴스화하는 STA 스레드에서 발생해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top