2013-01-31 10 views
10

Kompilacja libffi z VS11 daje następujący błąd linkeraKompilacja libffi z VS2012 nie powiedzie się z fatalnym błędzie LNK1281: nie można wygenerować SafeSEH obraz

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

Ten sam projekt był kompilacją grzywny z VS10, ale po auto uaktualnić z VS2012 , zaczęło dając błędzie konsolidatora

Wyjaśnienie w MSDN jest zbyt tajemniczy i najmniej pomocne

mogę odbudować z /SAFESEH:NO, ale jestem pewny implikacji.

Proszę doradzić, co może pójść nie tak.

Odpowiedz

20

Główną konsekwencją braku numeru SAFESEH jest fakt, że aplikacja nie zostanie przyjęta do sklepu Windows 8 lub do wersji Windows 8 desktop certification. Jeśli to nie jest problem dla ciebie, możesz użyć /SAFESEH:NO.

documentation mówi:

Najczęstszym powodem łącznik nie będzie w stanie wyprodukować obraz jest, ponieważ jeden lub więcej plików wejściowych (moduły) do łącznika nie było zgodne z sejfu funkcja obsługi wyjątków. Częstym powodem, dla którego moduł nie jest zgodny z bezpiecznymi procedurami obsługi wyjątków, jest to, że został on utworzony za pomocą kompilatora z poprzedniej wersji programu Visual C++.

Czy jest możliwe, że aktualizacja projektu do wersji VS2012 zmieniła ustawienie na /SAFESEH:YES. Być może nigdy nie budowałeś z SAFESEH.

+0

Dziękuję bardzo. Jesteś zbawicielem. BTW czy wiesz, jeśli jest to gdzieś udokumentowane "Główną konsekwencją braku SAFESEH jest to, że twoja aplikacja nie zostanie zaakceptowana dla sklepu Windows 8. Jeśli to nie jest problem dla ciebie, powinieneś użyć/SAFESEH: NO. ' – Abhijit

+0

Nie sądzę, że znajdziesz jakąkolwiek dokumentację na ten temat. Możesz łatwo znaleźć, że sklep Windows 8 wymaga SafeSEH. Ale jeśli chodzi o główną implikację, to nie będzie nigdzie napisane i jest w dużej mierze punktem widzenia. SafeSEH istnieje od dłuższego czasu. Wiele kompilatorów nie może nawet tworzyć tabel wyjątków, których wymaga. I oczywiście odchodzi, ponieważ ma znaczenie tylko dla aplikacji 32-bitowych. Napisz 64-bitową aplikację, a twój plik wykonywalny musi zawierać tabele wyjątków. –

+1

Dziękujemy! Uwielbiam wyszukiwać i znajdować hit w StackOverflow, który dokładnie pasuje do mojego problemu! – cplotts

Powiązane problemy