web-dev-qa-db-fra.com

module dangereux pour SAFESEH image C++

J'utilise la version bêta de Microsoft Visual Studio 2011 Professional

J'essaie d'exécuter les fichiers OpenCV C++ ( http://opencv.willowgargarage.com/wiki/Welcome ) que j'ai compilés à l'aide de cMake & Visual Studio Complier.

Cependant, lorsque je vais déboguer le projet, je reçois plus de 600 erreurs, la plupart d'entre elles étant:

erreur LNK2026: module non sécurisé pour l'image SAFESEH.

Apparemment, ces fichiers font partie du projet opencv_ffmpeg mais je n’ai pas pu les trouver. J’ai jeté un coup d’œil à la page safeseh Safe Exception Handlers de la page d’aide de Microsoft mais je n’ai trouvé aucune réponse définitive.

Je me demandais si quelqu'un d'autre avait eu ce problème et s'il avait réussi à le résoudre.

80
Aaron Thompson

D'après les commentaires:

Cela se produit lorsque vous liez un fichier .obj ou .lib contenant du code créé par une version antérieure du compilateur. Ce qui bien sûr serait courant si vous téléchargiez un binaire pour opencv_ffmpeg au lieu de la source. Vous pouvez désactiver l'option de l'éditeur de liens, mais vous aurez toujours une incompatibilité de version CRT pouvant octroyer. Reconstruisez la bibliothèque à partir du source. - Hans Passant le 15 mai à 13h01

Merci pour l'aide, cela a fonctionné - Aaron Thompson 17 mai à 14h50

57
Bo Persson

La désactivation de l’option "L’image présente des gestionnaires d’exception fiables" dans les propriétés du projet -> Propriétés de configuration -> lieur -> onglet Avancé m’a aidé.

129
Ievgen

Une autre méthode consiste à ajouter un gestionnaire SEH (vide, par exemple) aux fichiers asm et à les compiler avec l'option /safeseh, puis à compiler un autre code normalement avec l'option /SAFESEH:YES du compilateur.

Gestionnaire de SEH vide:

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp
8
DitherSky

Si vous rencontrez cette erreur lors de la construction de ZLIB dans Visual Studio, voici la solution. Recherchez contrib\masmx86\bld_ml32.bat et ajoutez /safeseh en option

Avant

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

Après

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

Votre kilométrage peut varier, mais aucune des suggestions ci-dessus ne fonctionne pour moi (bien que je n’ai pas essayé de faire rouler mon propre gestionnaire d’exception asm). 

Qu'est-ce qui a fonctionné a été de sélectionner la version cible/x64 de build.

J'utilise Windows 10 sur un ordinateur 64 bits et j'utilise Visual Studio 2015.

La version cible/Win32 fonctionne également. Je suppose que l'essentiel est de choisir "Libérer".

0
Bob Stine