यह जानने के लिए कि लिंकर किस चीज की तलाश कर रहा है, इसे वर्बोज मोड में चलाएं।
उदाहरण के लिए, मैंने ZLIB समर्थन के साथ MySQL संकलित करने की कोशिश करते हुए इस मुद्दे का सामना किया। संकलन के दौरान मुझे इस तरह एक त्रुटि प्राप्त हुई थी:
/usr/bin/ld: cannot find -lzlib
मैंने कुछ Googl'ing किया और एक ही तरह के विभिन्न मुद्दों पर आते रहे, जहां लोग यह सुनिश्चित करने के लिए कहेंगे कि .so फ़ाइल वास्तव में मौजूद है और यदि ऐसा नहीं है, तो संस्करण फ़ाइल के लिए एक सिमलिंक बनाएं, उदाहरण के लिए, zlib। so.1.2.8। लेकिन, जब मैंने जाँच की, तो zlib.so DID मौजूद है। तो, मैंने सोचा, निश्चित रूप से यह समस्या नहीं हो सकती है।
मैं एक और पोस्ट पर आया था जिसमें इंटनेट पर LD_DEBUG = सभी के साथ चलने का सुझाव दिया गया था:
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
देखा!