Để tìm ra những gì trình liên kết đang tìm kiếm, hãy chạy nó trong chế độ dài dòng.
Ví dụ, tôi gặp phải vấn đề này trong khi cố gắng biên dịch MySQL với hỗ trợ ZLIB. Tôi đã nhận được một lỗi như thế này trong quá trình biên dịch:
/usr/bin/ld: cannot find -lzlib
Tôi đã thực hiện một số Google và tiếp tục gặp các vấn đề khác nhau cùng loại mà mọi người sẽ nói để đảm bảo tệp .so thực sự tồn tại và nếu không, thì hãy tạo một liên kết tượng trưng cho tệp được phiên bản, ví dụ: zlib. so.1.2.8. Nhưng, khi tôi kiểm tra, zlib.so DID tồn tại. Vì vậy, tôi nghĩ, chắc chắn đó không phải là vấn đề.
Tôi đã xem qua một bài đăng khác trên Internets được đề xuất để thực hiện với LD_DEBUG = all:
LD_DEBUG=all make
Mặc dù tôi đã nhận được TON đầu ra gỡ lỗi, nhưng nó không thực sự hữu ích. Nó thêm nhiều nhầm lẫn hơn bất cứ điều gì khác. Vì vậy, tôi đã định bỏ cuộc.
Sau đó, tôi đã có một bản hùng ca. Tôi nghĩ rằng để thực sự kiểm tra văn bản trợ giúp cho lệnh ld:
ld --help
Từ đó, tôi tìm ra cách chạy ld trong chế độ dài dòng (hãy tưởng tượng rằng):
ld -lzlib --verbose
Đây là đầu ra tôi nhận được:
==================================================
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...
Vì vậy, để cuối cùng sửa nó để tôi có thể biên dịch MySQL với phiên bản ZLIB của riêng tôi (chứ không phải là phiên bản đi kèm):
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
Voila!