Щоб зрозуміти, що шукає лінкер, запустіть його у багатослівному режимі.
Наприклад, я зіткнувся з цим питанням під час спроби компілювати MySQL із підтримкою ZLIB. Я отримував подібну помилку під час компіляції:
/usr/bin/ld: cannot find -lzlib
Я робив деякий Googl'ing і постійно стикався з різними проблемами одного і того ж виду, де люди би сказали, щоб переконатися, що файл .so фактично існує, а якщо його немає, то створити символьне посилання на файл із версією, наприклад, zlib. так.1.2.8. Але, коли я перевірив, zlib.so DID існує. Отже, я подумав, це точно не може бути проблемою.
Я натрапив на ще одну посаду в Інтернеті, яка запропонувала запустити make з LD_DEBUG = all:
LD_DEBUG=all make
Хоча я отримав TON налагодження виводу, це насправді не було корисним. Це додало більше плутанини, ніж все інше. Отже, я збирався здатися.
Тоді у мене було богоматіння. Я думав перевірити текст довідки для команди ld:
ld --help
З цього я зрозумів, як запустити ld у багатослівному режимі (уявіть це):
ld -lzlib --verbose
Це результат, який я отримав:
==================================================
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
Дін, дінь, дінь ...
Отже, щоб остаточно виправити це, щоб я міг компілювати MySQL із власною версією ZLIB (а не з пакетною версією):
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
Вуаля!