Głupie --as-needed
Jakub Bogusz
qboosh w pld-linux.org
Nie, 11 Lut 2007, 20:13:39 CET
On Sat, Feb 10, 2007 at 04:20:58PM +0100, Marcin 'Qrczak' Kowalczyk wrote:
> Mam takie polecenie linkowania (nie w pakiecie PLD):
>
> gcc -pthread small/perl/PerlNetHTTP.o -o
> small/perl/PerlNetHTTP ../lib/libko_Perl.so -rdynamic
> -Wl,-rpath,/usr/lib/perl5/5.8.8/athlon-pld-linux-thread-multi/CORE
> -Wl,--as-needed /usr/lib/perl5/5.8.8/athlon-pld-linux-thread-multi/auto/DynaLoader/DynaLoader.a -L/usr/lib/perl5/5.8.8/athlon-pld-linux-thread-multi/CORE -lperl -ldl -lm -lpthread -lc -lcrypt ../lib/libko_Core.so -lm -lgmp -lsigsafe -lrt /home/users/qrczak/cvs/kokogut-0.7.1/runtime/main.o
>
> Fragment od -rdynamic do -lcrypt został wciągnięty przez:
> perl -MExtUtils::Embed -e ldopts
> Jak widać, Perl przekazując opcje, z którymi był linkowany, przekazał
> również -Wl,--as-needed.
Nie powinien tego robić.
> Program się nie linkuje, m.in.:
> ../lib/libko_Core.so: undefined reference to `timer_settime'
> ../lib/libko_Core.so: undefined reference to `__gmpz_cmp'
> tzn. nie znajduje m.in. symboli z -lrt i -lgmp używanych
> w ../lib/libko_Core.so.
Bo libko_Core.so powinno być zlinkowane z -lrt -lgmp.
Jeszcze druga rzecz (gdyby wyszło potem) - .o powinno być przed
bibliotekami, z których korzysta.
> Dlaczego? Jak to poprawić (poza wysedowywaniem -Wl,--as-needed z opcji
> przekazywanych przez Perla)? Na moje oko kolejność bibliotek jest dobra.
> Jeśli zmienić libko_{Core,Perl}.so na libko_{Core,Perl}.a, to się
> linkuje. Te biblioteki z pewnych powodów są kompilowane bez -fPIC;
> nie wiem, czy to ma jakies znaczenie.
Jeżeli linkujesz do binarki (i bez -pie), to nie szkodzi.
> Czy Perl powinien przekazywać przez ldopts opcję -Wl,--as-needed, która
> psuje linkowanie?
Nie powinien.
--
Jakub Bogusz http://qboosh.pl/
Więcej informacji o liście dyskusyjnej pld-devel-pl