Aby dowiedzieć się, czego szuka linker, uruchom go w trybie pełnym.
Na przykład ten problem napotkałem podczas próby kompilacji MySQL z obsługą ZLIB. Podczas kompilacji otrzymałem taki błąd:
/usr/bin/ld: cannot find -lzlib
Zrobiłem trochę Googl'ingu i ciągle napotykałem różne problemy tego samego rodzaju, w których ludzie mówili, aby upewnić się, że plik .so faktycznie istnieje, a jeśli nie, to utwórz dowiązanie symboliczne do pliku z wersją, na przykład zlib. 1.2.1. Ale kiedy sprawdziłem, Zlib.so DID istnieje. Pomyślałem więc, że to nie może być problem.
Natknąłem się na inny post w Internecie, który sugerował uruchomienie make z LD_DEBUG = all:
LD_DEBUG=all make
Chociaż dostałem TONę danych wyjściowych do debugowania, w rzeczywistości nie było to pomocne. To spowodowało więcej zamieszania niż cokolwiek innego. Więc miałem się poddać.
Potem miałem objawienie. Pomyślałem, żeby sprawdzić tekst pomocy dla polecenia ld:
ld --help
Na tej podstawie wymyśliłem, jak uruchomić ld w trybie pełnym (wyobraź to sobie):
ld -lzlib --verbose
Oto wynik, który otrzymałem:
==================================================
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.a failed
attempt to open /usr/local/lib64/libzlib.so failed
attempt to open /usr/local/lib64/libzlib.a failed
attempt to open /lib64/libzlib.so failed
attempt to open /lib64/libzlib.a failed
attempt to open /usr/lib64/libzlib.so failed
attempt to open /usr/lib64/libzlib.a failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.a failed
attempt to open /usr/local/lib/libzlib.so failed
attempt to open /usr/local/lib/libzlib.a failed
attempt to open /lib/libzlib.so failed
attempt to open /lib/libzlib.a failed
attempt to open /usr/lib/libzlib.so failed
attempt to open /usr/lib/libzlib.a failed
/usr/bin/ld.bfd.real: cannot find -lzlib
Ding, ding, ding ...
Tak więc, aby w końcu to naprawić, abym mógł skompilować MySQL z moją własną wersją ZLIB (zamiast wersji dołączonej):
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
Voila!