módulo inseguro para imagen SAFESEH C++

4 minutos de lectura

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.

  • 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

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.mscadicional -safeseh hacia ASFLAGS.

    – joder

    7 de junio de 2021 a las 10:03

avatar de usuario
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

¿Ha sido útil esta solución?