मुझे LD_LIBRARY_PATH
लिंक समय (इस प्रश्न के पास रन टाइम के साथ कुछ लेना देना नहीं है) के साथ समस्याएं आ रही हैं।लिंक समय पर एलडी_LIBRARY_PATH और -L के बीच क्या अंतर है?
लिंक लाइन इस तरह दिखता है जब मैं बनाने के (इस छ ++ संस्करण 4.1.x का उपयोग कर एक Linux सिस्टम है) चलाएँ:
g++ a.o b.o c.o -o myapp \
-L/long/path/to/libs/ \
-L/another/long/path/ \
-labc -ldef -lghi
-l
विकल्पों साझा लाइब्रेरियों को संदर्भित (जैसे, libabc.so) जो मौजूद -L
विकल्पों द्वारा निर्दिष्ट निर्देशिकाओं में। वे निर्देशिका LD_LIBRARY_PATH
में भी दिखाई देती हैं। उस कॉन्फ़िगरेशन के साथ, लिंक सफल है, और मैं एप्लिकेशन चला सकता हूं।
/usr/bin/ld: cannot find -labc
दूसरी ओर, अगर मैं -L
विकल्पों की सूची से निर्देशिका निकालें, तब मैं कई मिलती है:
अगर मैं LD_LIBRARY_PATH
से निर्देशिका निकालें, तब मैं एक ही त्रुटि पंक्ति जैसे मिल
/usr/bin/ld: warning: libabc.so, needed by /long/path/to/libs/libxyz.so,
not found (try using -rpath or -rpath-link)
और उसके बाद इस तरह के रूप में कई और अधिक त्रुटियों,:
/long/path/to/libs/libdef.so: undefined reference to `Foo::Bar<Baz>::junk(Fred*)'
जैसे चेतावनी
क्या कोई LD_LIBRARY_PATH
और -L
के बीच अंतर बता सकता है? मैं इस सामान को गहराई से समझना चाहता हूं, इसलिए संदर्भों की बहुत सराहना की जाती है!
इसके अलावा, LD_LIBRARY_PATH
का उपयोग करने से बचने के लिए मुझे लिंक लाइन में क्या जोड़ना है?
संपादित करें: जब निर्देशिका -L
से लापता थे, संकलक "-rpath या -rpath-लिंक का उपयोग करके देखें" करने का सुझाव दिया। मुझे नहीं लगता कि मैंने कभी भी उन विकल्पों को मेकफ़ाइल में देखा है। क्या तुम? यकीन नहीं है कि अगर यह LD_LIBRARY_PATH
समस्या हालांकि मदद करेगा।
यह बताते हुए कि कुछ क्यों "बुरा" कह रहा है, यह निश्चित रूप से एक "बुरी" चीज है (और मैं कह सकता हूं कि यह क्यों है)। – cedbeu