Pregunta módulo inseguro para SAFESEH image C ++


Estoy usando Microsoft Visual Studio 2011 Professional Beta

Estoy tratando de ejecutar los archivos OpenCV C ++ (http://opencv.willowgarage.com/wiki/Welcome) que he compilado usando cMake & the Visual Studio Complier.

Sin embargo, cuando voy a depurar el proyecto, recibo más de 600 errores, la mayoría de ellos son:

error LNK2026: módulo inseguro para la imagen SAFESEH.

Aparentemente, estos archivos están en el proyecto opencv_ffmpeg pero no pude encontrarlos. He echado un vistazo a la página Safeseh Safe Exception Handlers en la página de ayuda de Microsoft, pero no he podido encontrar ninguna respuesta definitiva.

Me preguntaba si alguien más tuvo este problema y si lograron solucionarlo.


76
2018-05-15 11:41


origen


Respuestas:


De los comentarios:

Esto sucede cuando vincula un .obj o .lib que contiene código creado por una versión anterior del compilador. Lo que por supuesto sería común si descargara un archivo binario para opencv_ffmpeg en lugar de la fuente. Puede desactivar la opción de engarce pero aún tendrá una incompatibilidad de versión CRT que puede bytear. Reconstruye la biblioteca desde la fuente. - Hans Passant 15 de mayo a las 13:01   
  
  Gracias por la ayuda, funcionó - Aaron Thompson 17 de mayo a las 14:50


54
2017-11-03 16:36



La opción de desactivar "La imagen tiene controladores de excepciones seguros" en Propiedades del proyecto -> Propiedades de configuración -> Enlazador -> pestaña Avanzado me ayudó.


118
2017-09-10 16:48



Otra forma es agregar algunos manejadores SEH (vacíos por ejemplo) a archivos ASM y compilarlos con /safeseh opción, luego compila otro código normalmente con /SAFESEH:YES opción de compilador

Manejador SEH vacío:

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp

6
2017-11-27 10:03



Si obtienes este error al compilar ZLIB en Visual Studio, aquí está la solución. Buscar contrib\masmx86\bld_ml32.bat y añadir /safeseh como una opción

antes de

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

Después

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

6
2018-05-15 18:38



Su kilometraje puede variar, pero ninguna de las sugerencias anteriores funcionó para mí (aunque no intenté rodar mi propio controlador de excepción de ASM).

Lo que sí funcionó fue seleccionar el objetivo de compilación Release / x64.

Estoy ejecutando Windows 10 en una máquina de 64 bits y usando Visual Studio 2015.

El objetivo Release / Win32 también funciona. Supongo que lo principal es elegir "Liberar".


0