หากต้องการทราบว่าลิงเกอร์ค้นหาอะไรให้เรียกใช้ในโหมด verbose
ตัวอย่างเช่นฉันพบปัญหานี้ขณะพยายามรวบรวม MySQL ด้วยการสนับสนุน ZLIB ฉันได้รับข้อผิดพลาดเช่นนี้ระหว่างการรวบรวม:
/usr/bin/ld: cannot find -lzlib
ฉันทำ Googl'ing แล้วและพบกับปัญหาที่แตกต่างกันซึ่งผู้คนจะพูดเพื่อให้แน่ใจว่าไฟล์. so มีอยู่จริงและหากไม่เป็นเช่นนั้นให้สร้าง symlink ไปยังไฟล์ที่มีเวอร์ชันเช่น zlib so.1.2.8 แต่เมื่อฉันตรวจสอบ zlib.so DID อยู่ ดังนั้นฉันคิดว่าแน่นอนว่าไม่สามารถมีปัญหา
ฉันเจอโพสต์อื่นใน Internets ที่แนะนำให้เรียกใช้ make ด้วย LD_DEBUG = ทั้งหมด:
LD_DEBUG=all make
แม้ว่าฉันจะได้รับการตรวจแก้จุดบกพร่องตันแล้วมันไม่ได้มีประโยชน์ มันเพิ่มความสับสนมากกว่าสิ่งอื่นใด ดังนั้นฉันกำลังจะยอมแพ้
จากนั้นฉันก็มีความศักดิ์สิทธิ์ ฉันคิดว่าจะตรวจสอบข้อความช่วยเหลือจริงสำหรับคำสั่ง ld:
ld --help
จากนั้นฉันหาวิธีใช้ ld ในโหมด verbose (ลองจินตนาการดู):
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
Ding, ding, ding ...
ดังนั้นในที่สุดก็แก้ไขได้ดังนั้นฉันสามารถรวบรวม MySQL กับ ZLIB เวอร์ชันของฉันเอง (แทนที่จะเป็นเวอร์ชั่นที่รวมไว้):
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
Voila!