तो, मेरे पास एक प्रोग्राम है जो ओपनब्लैस के साथ चलता है और मैं इसे संकलित करना चाहता हूं। लिंकिंग प्रक्रिया इस तरह दिखती है:क्यों LD_LIBRARY_PATH बीएडी है और गतिशील पुस्तकालयों को लोड करने का सही तरीका
gcc -o prog prog.o -O3 -I/opt/OpenBLAS/include -L/opt/OpenBLAS/lib -lopenblas
अभी तक इतना अच्छा है। अगर मैं -L
विकल्प निकालने के लिए, मैं लिंक करने की प्रक्रिया
/usr/bin/ld: cannot find -lopenblas
त्रुटियों के बिना
-L
सब कुछ लिंक के साथ
में कोई त्रुटि मिलती है। हालांकि, जब मैं मैं निम्नलिखित त्रुटि मिलती है इसे चलाने के लिए प्रयास करें:
./prog: error while loading shared libraries: libopenblas.so.0: cannot open shared object file: No such file or directory
अगर मैं /opt/OpenBlas/lib
को env चर LD_LIBRARY_PATH
सेट मैं इस कार्यक्रम चला सकते हैं, लेकिन http://xahlee.info/UnixResource_dir/_/ldpath.html जैसे कई स्रोतों इस पर विचार एक बुरी अभ्यास के रूप में है और मैं लगभग सभी तर्क समझ सकते हैं। लेख में उल्लिखित अन्य विधि (एलडी कॉन्फ़िगरेशन को संशोधित करें) को कुछ हद तक खराब अभ्यास माना जाता है। अंत में, आप /usr/lib
में लाइब्रेरी में सिमलिंक जोड़ सकते हैं। पिछले दो तरीकों से एक बड़ी समस्या यह है कि आपको सूडो पहुंच की आवश्यकता है।
तो मेरा सवाल यह है कि मैं एक साझा लाइब्रेरी से जुड़े प्रोग्राम को संकलित और चला सकता हूं जो LD_LIBRARY_PATH
और सूडो एक्सेस के बिना डिफ़ॉल्ट पथ (/usr/lib
) में स्थित नहीं है। लेख में वे कहते हैं कि आप साझा पुस्तकालयों को देखने के लिए बाइनरी में बस 'लिख सकते हैं' लेकिन मुझे नहीं पता कि यह कैसे करना है (-L
ध्वज ऐसा नहीं कर रहा है)। मैं इस बात की सराहना करता हूं कि कोई भी इस मामले को समझा सकता है, क्योंकि मैं हर जगह देख रहा हूं और मैं बहुत उलझन में हूं (कुछ संदर्भ यह सुझाव देते हैं कि ध्वज '-एल' करना चाहिए लेकिन मैं मेरे लिए काम नहीं करता)। पहले ही, आपका बहुत धन्यवाद।
आप रनटाइम लाइब्रेरी खोज पथ – sshannin