Estoy usando Microsoft Visual Studio 2011 Professional Beta
Estoy tratando de ejecutar los archivos OpenCV C++ (http://opencv.willowgarage.com/wiki/Bienvenido) que he compilado usando cMake y Visual Studio Complier.
Sin embargo, cuando voy a depurar el proyecto, recibo más de 600 errores, la mayoría de los cuales son:
error LNK2026: módulo no seguro para imagen SAFESEH.
Aparentemente, estos archivos están en el proyecto opencv_ffmpeg pero no pude encontrarlos, eché un vistazo a la página Safeseh Safe Exception Handlers 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 lograron solucionarlo.
La opción de desactivación “La imagen tiene controladores de excepciones seguros” en las propiedades del proyecto -> Propiedades de configuración -> Enlazador -> pestaña Avanzado me ayudó.
-
Esto no tuvo ningún efecto para mí.
– Pop-A-Alijo
16 de enero de 2015 a las 17:04
-
Éxito, con VS 2013 Express
– gbarry
8 sep 2017 a las 20:12
-
Éxito, VS 2015
– usuario707779
4 mayo 2018 a las 15:16
-
Éxito, VS 2012
– themadmax
5 de julio de 2018 a las 7:27
-
Éxito, VS 2017
– ke4ktz
6 mayo 2019 a las 13:44
De los comentarios:
Esto sucede cuando vincula un .obj o .lib que contiene código creado por una versión anterior del compilador. Lo cual, por supuesto, sería común si descargara un binario para opencv_ffmpeg en lugar de la fuente. Puede desactivar la opción del vinculador, pero aún tendrá una incompatibilidad de versión CRT que puede bytear. Reconstruya 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
-
También puede deberse, como indica el error, a módulos para los que el enlazador no puede encontrar controladores de excepciones seguros. Módulos de lenguaje ensamblador en particular, como se discutió en otras respuestas. Hay algo de info sobre esto aquí.
–Nick Westgate
5 de julio de 2017 a las 22:17
Si recibió este error al compilar ZLIB en Visual Studio, esta es la solución. Buscar contrib\masmx86\bld_ml32.bat
y añadir /safeseh
como 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
-
Tuve el mismo problema con zlib, pero tuve que cambiar accesorios en el
.asm
archivos en el explorador de soluciones en su lugar.– Cillie Malan
4 de julio de 2018 a las 9:42
-
Del mismo modo, utilizando
win32\Makefile.msc
adicional-safeseh
haciaASFLAGS
.– joder
7 de junio de 2021 a las 10:03
Bob Stine
Su millaje puede variar, pero ninguna de las sugerencias anteriores funcionó para mí (aunque no intenté implementar mi propio controlador de excepciones asm).
Lo que funcionó fue seleccionar el destino de compilación Release/x64.
Estoy ejecutando Windows 10 en una máquina de 64 bits y uso Visual Studio 2015.
La versión de destino/Win32 también funciona. Supongo que lo principal es elegir “Liberar”.
-
No me molesté en agregar un controlador a la fuente de terceros (zlib),
/safeseh
parece suficiente ¡Esto realmente debería ser votado!– mlt
25 de noviembre de 2015 a las 23:28
-
Cualquiera que tenga los mismos problemas con zlib vea esto (CTRL + F safeseh) tannerhelland.com/5076/compile-zlib-winapi-wapi-stdcall
– codekiddy
30 de noviembre de 2015 a las 22:21
-
Agregué “/safeseh” a la línea de comando en las propiedades del archivo .asm y esto funcionó.
– Mecanik
5 de agosto de 2020 a las 9:15
-
Aunque no es una respuesta real a la pregunta, esta respuesta fue útil para mí. Es importante reconstruir los archivos obj después de eso con el archivo bat que está en el mismo directorio.
– flexionar
23 de diciembre de 2021 a las 15:05
Esto sucede cuando vincula un .obj o .lib que contiene código creado por una versión anterior del compilador. Lo cual, por supuesto, sería común si descargara un binario para opencv_ffmpeg en lugar de la fuente. Puede desactivar la opción del vinculador, pero aún tendrá una incompatibilidad de versión CRT que puede bytear. Reconstruya la biblioteca desde la fuente.
-Hans Passant
15 mayo 2012 a las 13:01
Gracias por la ayuda, funciono
– Aarón Thompson
17 mayo 2012 a las 14:50
@HansPassant ¿Qué hacer cuando no hay fuente?
– GregC
30 de septiembre de 2012 a las 15:57
Lo obvio: pídele al propietario del código que te proporcione una actualización.
-Hans Passant
30 de septiembre de 2012 a las 15:58
@HansPassant Espero que el proveedor todavía esté disponible para hacer una actualización. Suena como un tipo de problema de “factor de camión de uno”.
– GregC
30 de septiembre de 2012 a las 16:04