2013-01-31 7 views
10

compilazione libffi con VS11 ha pronunciato la seguente errore di linkerCompilazione libffi con VS2012 fallisce con fatale LNK1281 errore: Impossibile generare immagine SafeSEH

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

Lo stesso progetto è stato la compilazione bene con VS10, ma dopo un auto aggiornamento con VS2012 , ha iniziato dando errore del linker

la spiegazione in MSDN è troppo criptico e meno utile

potrei ricostruire con /SAFESEH:NO, ma io sono sicuri della implicazione.

Si prega di indicare cosa potrebbe andare storto.

risposta

20

L'implicazione principale di non avere SAFESEH è che l'applicazione non verrà accettata per l'archivio di Windows 8 o per Windows 8 desktop certification. Se questo non è un problema per te allora sentiti libero di usare /SAFESEH:NO.

Il documentation dice:

Il motivo più comune per il linker di non essere in grado di produrre un'immagine è perché uno o più file di input (moduli) al linker non era compatibile con la cassaforte funzionalità di gestori di eccezioni. Un motivo comune per cui un modulo non è compatibile con gestori di eccezioni sicuri è perché è stato creato con un compilatore da una versione precedente di Visual C++.

E 'possibile che l'aggiornamento del progetto a VS2012 abbia cambiato l'impostazione in /SAFESEH:YES. Forse non hai mai costruito con SAFESEH.

+0

Grazie mille. Sei un salvatore. BTW sai se questo è documentato da qualche parte? L'implicazione principale di non avere SAFESEH è che la tua applicazione non sarà accettata per l'archivio di Windows 8. Se questo non è un problema per te allora dovresti usare/SAFESEH: NO. ' – Abhijit

+0

Non penso che troverete alcuna documentazione su questo. Puoi facilmente scoprire che Windows 8 store richiede SafeSEH. Ma poiché è la principale implicazione, non sarà scritto da nessuna parte ed è in gran parte un punto di vista. SafeSEH è in circolazione da molto tempo. Molti compilatori non sono nemmeno in grado di produrre le tabelle delle eccezioni che richiede. E ovviamente sta andando via perché ha significato solo per le app a 32 bit. Scrivi un'app a 64 bit e il tuo eseguibile deve contenere tabelle di eccezioni. –

+1

Grazie! Adoro cercare e trovare un successo su StackOverflow che corrisponde esattamente al mio problema! – cplotts

Problemi correlati