2012-06-29 10 views
5

Wiem, podobne pytanie do tego zostało już zadane, ale nie byłem w stanie rozwiązać ten problem godzinami.Mingw wielu definicji _Unwind_resume

Zasadniczo mam DLL z kodem i aplikacji, która go wzywa. Wszystko działa dobrze, ale jeśli wyjmę oba poza środowisko mojego rozwoju, oznacza to, że program nie może się uruchomić, ponieważ na komputerze brakuje libgcc_s_dw2 1.dll.

Jest to wystarczająco fair, biorąc pod uwagę, że nie jest to komputer programistyczny. Więc dla dystrybucji dodałem flagi kompilatora "-static-libgcc -static-libstdc++". Zrobiłem to dla biblioteki dll i dla aplikacji.

Ale kiedy mogę skompilować aplikację pojawia się błąd:

"multiple definition of `_Unwind_Resume'"

myślałem, że to było spowodowane zarówno dll i aplikacji mającej statycznych bibliotek wbudowanych w nich, i to jest. Ale jeśli oba nie mają wbudowanych bibliotek statycznych, program nie będzie działał na komputerach użytkowników końcowych.

Jak mogę usunąć ten błąd, gdy nadal nie mam zależności od bibliotek mingw? Moje IDE to Code :: Blocks.

David

EDIT: oto log kompilacji podczas budowania aplikacji, która łączy się ze dll:

c:/mingw/bin/../lib/gcc/mingw32/4.6.2/libgcc_eh.a(unwind-dw2.o):(.text+0x298c): multiple definition of `_Unwind_Resume' 

..\EquilibriumEngine\bin\Release\libEquilibriumEngine.dll.a(d000015.o):(.text+0x0): first defined here 

collect2: ld returned 1 exit status 

Process terminated with status 1 (0 minutes, 0 seconds) 

2 errors, 0 warnings 
+0

można dodać cokolwiek dziennika Code :: Blocks ma do kompilacji (coś który zawiera polecenia używane do kompilacji/link wzdłuż z ewentualnymi ostrzeżeniami i błędami)? –

+2

Być może ta odpowiedź http://stackoverflow.com/questions/8765215/multiple-definitions-of-unwind-resume zawiera wskazówki, co jest nie tak. – Arnestig

Odpowiedz

1

należy powtórzyć z łącznikiem flagą -static tylko. Ale (jeśli to możliwe) dołącz libgcc_s_dw2 1.dll do swojego exe i rozpowszechniaj oba. Możesz pobrać bibliotekę z katalogu MinGW/bin.

Upewnij się także, że nie dodano -static-libgcc do kompilatora, ale linker -flagi!

0

Jeden hacky obejście, które często działa to dodać to do flagi linkera:

-Wl,-allow-multiple-definition