Frage Modul unsicher für SAFESEH Image C ++


Ich verwende Microsoft Visual Studio 2011 Professional Beta

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

Aber wenn ich das Projekt debuggen lasse, bekomme ich mehr als 600 Fehler:

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

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

Ich habe mich gefragt, ob jemand anderes dieses Problem hatte und ob es ihm gelungen ist, es zu beheben.


76
2018-05-15 11:41


Ursprung


Antworten:


Aus den Kommentaren:

Dies passiert, wenn Sie eine .obj- oder .lib-Datei verknüpfen, die Code enthält, der von einer früheren Version des Compilers erstellt wurde. Das wäre natürlich üblich, wenn Sie eine Binärdatei für opencv_ffmpeg anstelle der Quelle heruntergeladen haben. Sie können die Linker-Option ausschalten, aber dann haben Sie immer noch eine CRT-Version Inkompatibilität, die Byte kann. Erstellen Sie die Bibliothek von der Quelle neu. - Hans Passant 15. Mai um 13:01 Uhr   
  
  Danke für die Hilfe, es hat geklappt - Aaron Thompson 17. Mai um 14:50 Uhr


54
2017-11-03 16:36



Die Deaktivierungsoption "Image hat sichere Ausnahme-Handler" in den Projekteigenschaften -> Konfigurationseigenschaften -> Linker -> Erweitert-Tab half mir.


118
2017-09-10 16:48



Eine andere Möglichkeit besteht darin, einige ASH-Handler (zum Beispiel leer) in ASM-Dateien einzufügen und sie zu kompilieren /safeseh Option, dann kompilieren Sie anderen Code normalerweise mit /SAFESEH:YES Compiler-Option.

Leerer SEH-Handler:

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp

6
2017-11-27 10:03



Wenn Sie diesen Fehler beim Erstellen von ZLIB in Visual Studio haben, ist hier die Lösung. Suche contrib\masmx86\bld_ml32.bat und hinzufügen /safeseh als Option

Vor

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

Nach

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

6
2018-05-15 18:38



Ihr Kilometerstand 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, das Build-Ziel Release / x64 auszuwählen.

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