2009-08-06 11 views
8

Mam problem z połączeniem biblioteki współużytkowanej za pomocą gcc 3.2.3 z binutils 2.18. Kiedy próbuję połączyć biblioteki pojawia się następujący błąd:Pomoc w przypadku niepowodzenia linkera: .gnu.linkonce.t

.gnu.linkonce.t _... mowa w sekcji .rodata: zdefiniowany w sekcji .gnu.linkonce.t wyrzucić ...

I Zrobiliśmy już sporo badań i większość miejsc zdaje się wskazywać, że jest to regresja wprowadzona w binutils 2.17 i później ustalona w 2.18.50, ale byłam ciekawa, czy ktokolwiek wiedział, czy są jakieś konkretne obejścia problemu bez dotykać binutils i gcc.

Dzięki.

Odpowiedz

6

Okazało się to dziwnym rezultatem, gdy system był niedopasowany gcc z różnymi binutils. Użyto/usr/bin/gcc (3.2.3) i/usr/local/bin/ld był używany z nim, ponieważ/usr/local/bin znajduje się przed/usr/bin na ścieżce. Kiedy przełączyliśmy się, aby/usr/bin znajdował się na początku ścieżki, wywołano odpowiedni plik/usr/bin/ld (binutils 2.14) i wydaje się, że to rozwiązało problem.

0

Ten błąd został znaleziony i został zgłoszony tutaj GCC bugzilla, mały egzemplarz testowy koncentrujący się na błędzie został zamieszczony w komentarzach, które uważam za naprawdę pomocne, aby nie tracić czasu. Ten błąd został naprawiony począwszy od GCC 3.4.6.

Mam ten problem podczas korzystania z GCC 3.3.1 z binutils 2.15.92 i binutils 2.17.50 i oba nie działały. Tak więc dla mnie to nie była mieszanka wersji GCC i binutils, które spowodowały problem.

Jeśli musisz użyć starszej wersji GCC, możesz użyć tej poprawki dostarczonej przez H.J. i zrobić to ręcznie, a następnie ponownie zbudować stary GCC.

Fix without COMDAT group

Fix with COMDAT group

Sprawdź załączniki w dostarczonych linki, które pokazuje dokładny diff do poprawki.

mam to zrobiłem i testowałem to i to działało skutecznie, łatanie GCC 3.3.1 z pierwszej poprawki „bez grupy COMDAT”, przebudowano go i wykorzystał je z binutils 2.15.92 i binutils 2.17.50.

Powiązane problemy