SAFESEH 이미지 C ++에 대해 안전하지 않은 모듈 Visual Studio

Microsoft Visual Studio 2011 Professional Beta를 사용하고 있습니다.

cMake 및 Visual Studio Complier를 사용하여 컴파일 한 OpenCV C ++ 파일 ( http://opencv.willowgarage.com/wiki/Welcome ) 을 실행하려고합니다 .

그러나 프로젝트를 디버깅 할 때 600 개 이상의 오류가 발생합니다.

오류 LNK2026 : SAFESEH 이미지에 대해 모듈이 안전하지 않습니다.

분명히이 파일은 opencv_ffmpeg 프로젝트에 있지만 찾을 수 없었고 Microsoft 도움말 페이지의 safeseh Safe Exception Handlers 페이지를 살펴 봤지만 확실한 답을 찾을 수 없었습니다.

나는 다른 누군가 가이 문제를 가지고 있는지 그리고 그들이 그것을 고칠 수 있는지 궁금합니다.



답변

댓글에서 :

이는 이전 버전의 컴파일러에서 만든 코드가 포함 된 .obj 또는 .lib를 링크 할 때 발생합니다. 물론 소스 대신 opencv_ffmpeg 용 바이너리를 다운로드 한 경우 일반적입니다. 링커 옵션을 끌 수 있지만 그래도 바이트 수있는 CRT 버전 비 호환성이 유지됩니다. 소스에서 라이브러리를 다시 빌드하십시오. – Hans Passant 5 월 15 일 13:01
 
 
도움에 감사드립니다 – Aaron Thompson 5 월 17 일 14:50


답변

프로젝트 속성-> 구성 속성-> 링커-> 고급 탭에서 “이미지에 안전한 예외 처리기가 있습니다”옵션을 비활성화하면 도움이되었습니다.


답변

Visual Studio에서 ZLIB를 빌드하는 동안이 오류가 발생하면 여기에 해결책이 있습니다. 를 찾아 contrib\masmx86\bld_ml32.bat및 추가 /safeseha 옵션으로

전에

ml /coff /Zi /c /Flmatch686.lst match686.asm
ml /coff /Zi /c /Flinffas32.lst inffas32.asm

ml /safeseh /coff /Zi /c /Flmatch686.lst match686.asm
ml /safeseh /coff /Zi /c /Flinffas32.lst inffas32.asm

답변

다른 방법은 일부 SEH 핸들러 (예 : 비어 있음)를 asm 파일에 추가하고 /safeseh옵션으로 컴파일 한 다음 /SAFESEH:YES컴파일러 옵션 으로 다른 코드를 정상적으로 컴파일하는 것입니다 .

빈 SEH 핸들러 :

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp

답변

마일리지는 다를 수 있지만 위의 제안 중 어느 것도 저에게 효과가 없었습니다 (내 자신의 asm 예외 처리기를 롤링하지 않았지만).

작업 한 것은 빌드 대상 릴리스 / x64를 선택하는 것입니다.

64 비트 컴퓨터에서 Windows 10을 실행하고 Visual Studio 2015를 사용하고 있습니다.

타겟 Release / Win32도 작동합니다. 가장 중요한 것은 “Release”를 선택하는 것입니다.