c ++ /cli - /clr 옵션이있는 0xc000007b (invalid_image_format)
-
22-07-2019 - |
문제
나는 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 스레드에서 발생해야합니다.