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.
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
Die Deaktivierung der Option "Image hat sichere Ausnahmehandler" in Projekteigenschaften -> Konfigurationseigenschaften -> Linker -> Registerkarte Erweitert hat mir geholfen.
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
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
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.