wake-up-neo.com

modul für SAFESEH-Image C++ unsicher

Ich verwende Microsoft Visual Studio 2011 Professional Beta

Ich versuche, die OpenCV-C++ - Dateien ( http://opencv.willowgarage.com/wiki/Welcome ) auszuführen, die ich mit cMake & dem Visual Studio Complier kompiliert habe.

Beim Debuggen des Projekts erhalte ich jedoch mehr als 600 Fehler, von denen die meisten folgende sind:

fehler LNK2026: Modul für SAFESEH-Image unsicher.

Anscheinend befinden sich diese Dateien im opencv_ffmpeg-Projekt, aber ich konnte sie nicht finden. Ich habe mir die Safeseh Safe Exception Handlers-Seite auf der Microsoft-Hilfeseite angesehen, konnte jedoch keine endgültigen Antworten finden.

Ich habe mich gefragt, ob jemand anderes dieses Problem hatte und ob er es geschafft hat, das Problem zu beheben.

80
Aaron Thompson

Aus den Kommentaren:

Dies geschieht, wenn Sie eine .obj- oder .lib-Datei verlinken, die Code enthält, der von einer früheren Version des Compilers erstellt wurde. Was natürlich üblich wäre, wenn Sie anstelle der Quelle eine Binärdatei für opencv_ffmpeg heruntergeladen haben. Sie können die Linker-Option deaktivieren, aber Sie haben immer noch eine Inkompatibilität der CRT-Version, die Byte verarbeiten kann. Erstellen Sie die Bibliothek aus dem Quellcode neu. - Hans Passant 15. Mai um 13:01 Uhr

Danke für die Hilfe, es hat funktioniert - Aaron Thompson 17. Mai um 14:50

57
Bo Persson

Die Deaktivierung der Option "Image hat sichere Ausnahmehandler" in Projekteigenschaften -> Konfigurationseigenschaften -> Linker -> Registerkarte Erweitert hat mir geholfen.

129
Ievgen

Eine andere Möglichkeit ist, einen SEH-Handler (z. B. leer) zu ASM-Dateien hinzuzufügen und diese mit der Option /safeseh zu kompilieren. Anschließend wird der andere Code normalerweise mit der Compileroption /SAFESEH:YES kompiliert.

Leerer SEH-Handler:

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp
8
DitherSky

Wenn Sie diesen Fehler beim Erstellen von ZLIB in Visual Studio erhalten haben, finden Sie hier die Lösung. Suchen Sie nach contrib\masmx86\bld_ml32.bat und fügen Sie /safeseh als Option hinzu

Vor

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

Nach dem

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

Ihre Laufleistung kann variieren, aber keiner der oben genannten Vorschläge funktionierte für mich (obwohl ich nicht versucht habe, meinen eigenen asm-Ausnahmebehandler zu rollen). 

Was funktionierte, war die Auswahl des Build-Ziels Release/x64.

Ich verwende Windows 10 auf einem 64-Bit-Computer und verwende Visual Studio 2015.

Das Ziel Release/Win32 funktioniert auch. Ich denke, die Hauptsache ist "Release" zu wählen.

0
Bob Stine