2013-01-31 3 views
10

Kompilieren libffi mit VS11 gibt die folgenden LinkerfehlerKompilieren libffi mit VS2012 nicht mit schwerwiegenden Fehlern LNK1281: Kann nicht SafeSEH Bild

libffi\libffi-3.0.9\ms\Win32\Debug\ffi.dll : fatal error LNK1281: Unable to generate SAFESEH image. 

Das gleiche Projekt wurde die Erstellung gut mit VS10, aber nach einem automatischen Upgrade mit VS2012 erzeugen fing es an Linker-Fehler

die Erklärung in MSDN gibt, ist zu kryptisch und am wenigsten hilfreich

ich mit /SAFESEH:NO wieder aufbauen könnte, aber ich bin die Implikation unsicher.

Bitte beraten Sie, was schief gehen könnte.

Antwort

20

Die wichtigste Konsequenz von SAFESEH ist, dass Ihre Anwendung nicht für den Windows 8 Store oder für Windows 8 desktop certification akzeptiert wird. Wenn das kein Problem für Sie ist, dann können Sie gerne /SAFESEH:NO verwenden.

Die documentation sagt:

Der häufigste Grund für den Linker nicht in der Lage sein, ein Bild zu erzeugen ist, weil ein oder mehrere der Eingabedateien (Module) an den Linker nicht mit dem sicheren vereinbar Ausnahmehandler-Funktion. Ein häufiger Grund dafür, dass ein Modul nicht mit sicheren Ausnahmehandlern kompatibel ist, ist, dass es mit einem Compiler aus einer früheren Version von Visual C++ erstellt wurde.

Ist es möglich, dass das Projekt-Upgrade auf VS2012 die Einstellung auf /SAFESEH:YES geändert hat. Vielleicht haben Sie noch nie mit SAFESEH gebaut.

+0

Vielen Dank. Du bist ein Retter. Übrigens, wissen Sie, ob dies irgendwo dokumentiert ist? Die Hauptbedeutung von SAFESEH ist, dass Ihre Anwendung nicht für den Windows 8 Store akzeptiert wird. Wenn das für Sie kein Problem ist, sollten Sie/SAFESEH: NO verwenden. ' – Abhijit

+0

Ich denke nicht, dass Sie irgendeine Dokumentation darüber finden. Sie können leicht feststellen, dass Windows 8 Store SafeSEH benötigt. Was aber die Hauptimplikation betrifft, wird das nirgends geschrieben und ist weitgehend eine Meinung. SafeSEH gibt es schon lange. Viele Compiler sind nicht einmal in der Lage, die benötigten Ausnahmetabellen zu erzeugen. Und natürlich geht es weg, weil es nur für 32-Bit-Apps Bedeutung hat. Schreiben Sie eine 64-Bit-App und Ihre ausführbare Datei muss Ausnahmetabellen enthalten. –

+1

Danke! Ich suche und finde einen Treffer auf StackOverflow, der genau zu meinem Problem passt! – cplotts

Verwandte Themen