2012-05-15 8 views
74

Estoy utilizando Microsoft Visual Studio 2011 Beta Profesionalmódulo inseguro para SAFESEH imagen C++

Estoy tratando de ejecutar el OpenCV C++ archivos (http://opencv.willowgarage.com/wiki/Welcome) que he compilado usando cAsegúrese & el Visual Studio Complier.

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

de error: módulo de imagen inseguras para SAFESEH.

Al parecer, estos archivos se encuentran en el proyecto opencv_ffmpeg pero no pude encontrarlos, he echado un vistazo a la página segura de excepción SafeSEH los manipuladores en la página de ayuda de Microsoft, pero no pude encontrar ninguna respuesta definitiva.

Me preguntaba si alguien más ha tenido este problema y si han podido arreglarlo.

+10

Esto ocurre cuando se vincula un .obj o .lib que contiene el código creado por una anterior versión 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. –

+0

Gracias por la ayuda, funcionó –

+0

@HansPassant ¿Qué hacer cuando no hay una fuente? – GregC

Respuesta

53

De los comentarios:

Esto ocurre cuando se vincula un .obj o .lib que contiene el 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 13:01

Gracias por la ayuda, funcionó - Aaron Thompson 17 de mayo a 14:50

+0

También puede deberse, como indica el error, a módulos para los cuales el vinculador no puede encontrar manejadores de excepciones seguros. Los módulos de lenguaje ensamblador en particular, como se discutió en otras respuestas. Hay algo de información sobre esto [aquí] (https://docs.microsoft.com/en-nz/cpp/build/reference/safeseh-image-has-safe-exception-handlers). –

111

opción de desactivación "La imagen tiene manejadores de excepciones seguro" en las propiedades del proyecto -> Propiedades de Configuración -> Enlazador -> pestaña Avanzado me ayudó.

+3

Esto no tuvo ningún efecto para mí. –

+0

Del mismo modo para mí. El truco parece ser que, aunque puedo elegir SAFESEH: NO en el submenú de Opciones Avanzadas bajo la configuración del enlazador, no será elegido. Siempre vuelve a SAFESEH: SÍ. – user382459

+0

Éxito, con VS 2013 Express – gbarry

6

Otra forma es agregar algunos manejadores SEH (vacíos por ejemplo) a los archivos asm y compilarlos con la opción /safeseh, luego compilar otro código normalmente con la opción del compilador /SAFESEH:YES.

vacío manejador SEH:

.safeseh SEH_handler 

SEH_handler proc 
;handler 
ret 

SEH_handler endp 
+1

No me molesté en agregar un controlador a la fuente de terceros (zlib), '/ safeseh' parece suficiente. ¡Esto realmente debería ser votado! – mlt

+2

Cualquiera que tenga los mismos problemas con zlib, vea esto (CTRL + F safeseh) http://www.tannerhelland.com/5076/compile-zlib-winapi-wapi-stdcall/ – codekiddy

0

Su kilometraje puede variar, pero ninguna de las sugerencias anteriores trabajado para mí (aunque no lo probé rodar mi propio gestor de excepciones ASM).

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

estoy corriendo Windows 10 en una máquina de 64 bits, y el uso de Visual Studio funciona 2015.

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

4

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

Antes

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 
Cuestiones relacionadas