2010-11-15 19 views
8

Często spotykane następujące ostrzeżenie z gdb:Co oznacza to ostrzeżenie?

warning: .dynamic section for XXX is not at the expected address

gdzie XXX to nazwa jakiejś biblioteki. Niedawno dostałem go dla libgobject-2.0.so. Moja aplikacja używa GTK. gdb uruchomił go bez problemów do wczoraj, kiedy zsynchronizowałem najnowszy kod z repozytorium i zbudowałem go na nowo. Od tego czasu skarży się na sekcję .dynamic. Jakie są możliwe powody? I jak mogę je rozwiązać?

Odpowiedz

5

Niektóre wersje gdb są w rzeczywistości bardziej przydatne przy tym ostrzeżeniu. coś, co wyjście tak:

ostrzeżenia: .dynamic sekcja dla „libhello.so” nie jest na oczekiwanym adres (zła wersja biblioteki lub niedopasowanie?)

Upewnij GDB znajdzie biblioteki program był rzeczywiście skompilowany zi, że wszelkie symbole debugowania, jeśli w osobnych plikach, dla aplikacji i biblioteki są aktualne i spójne z kompilacjami, których używasz.

Uaktualnienie brzmi jak dobry podejrzany dla przyczyny. Biblioteki prelinkowania również mogą powodować pojawianie się tego ostrzeżenia, chociaż myślę, że gdb poradzi sobie z tym przypadkiem.

+0

Typowa dla tego: T1) aplikacja została uruchomiona i działała ze starymi plikami binarnymi, T2), następnie pliki binarne/symbole zostały "zaktualizowane" na dysku (ale aplikacja nie została ponownie uruchomiona), T3), a następnie aplikacja uległa awarii (lub wygenerowano gcore). Patrząc na znacznik czasu uaktualnienia (T2) i znacznik czasu współrzutu (T3) - można by zakładać, że użyto właściwej (zaktualizowanej) biblioteki. Złe założenie! Wiedząc o tym wcześniej, zaoszczędziłbym mój dzień ... Nasze aplikacje używają niestandardowego środowiska startowego LD_LIBRARY/etc, więc musieliśmy wyczerpać wszystkie pozostałe opcje, zanim staniemy przed oczywistymi (ludzie z branży IT po prostu zapomnieli ponownie uruchomić aplikacje po aktualizacji) – Vlad

Powiązane problemy