यूआईसी साझा लाइब्रेरी नहीं ढूंढ सकता - लिनक्स, क्यूटी 5

मैं अपने स्रोत पेड़ का क्यूटी 5 हिस्सा बनाने की कोशिश कर रहा हूं, इसलिए मैंने इसे अपनी मशीन पर स्थापित नहीं किया है, बस इसे स्रोत नियंत्रण से कॉपी किया है। जब मैं uic.exe चलाने की कोशिश करता हूं तो मुझे कोई समस्या आ रही है:

    [email protected]:~/ct/LinuxLibs/Qt/bin > ./uic

./uic: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory

जब भी मैं libQt5Core लाइब्रेरी को bin निर्देशिका में कॉपी करता हूं तब भी मुझे वही त्रुटि मिल रही है। यूआईसी साझा पुस्तकालयों की तलाश कैसे कर रहा है? क्या कोई पर्यावरण चर है जिसे मुझे ठीक करने के लिए सेट करने की आवश्यकता है?

उत्तर:

उत्तर № 1 के लिए 1

कार्यक्रम के द्वारा समर्थित एक निर्धारित स्थान में निर्भर साझा पुस्तकालयों को न डालने का यह एक और मामला है।

यदि आप "निष्पादन योग्य के रूप में फ़ाइलों को कॉपी करने" की योजना बना रहे हैं, तो तेज़ समाधान लाइब्रेरी लोड पथ में निर्देशिका का संदर्भ देना है, उदाहरण के लिए यदि बाइनरी में है $HOME/foo, तुम करो:

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}$HOME/foo

यह जोड़ता है या बनाता है $HOME/foo रन-टाइम-लिंकर का लोड पथ। नतीजतन, आपके द्वारा चलाए जाने वाले किसी भी प्रोग्राम पुस्तकालयों के लिए इस निर्देशिका में देखेंगे, साथ ही ओएस के लिए डिफ़ॉल्ट सेट (जिसे परिभाषित किया गया है) ld.so विन्यास), साथ ही साथ पथ जो अनुप्रयोग के भीतर परिभाषित हैं ( rpath)।

यदि आप इस मार्ग का पालन करने जा रहे हैं, तो आप बाइनरी को target.bin पर ले जाने के लिए क्या कर सकते हैं, एक लक्ष्य बैश स्क्रिप्ट बनाएं, जो स्वचालित रूप से बिन फ़ाइल को आमंत्रित करती है; उदा।

#!/bin/bash -p
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}$(dirname $0)
exec $0.bin "$*"

एक माध्यमिक तंत्र जो आपको अनुमति देगाबाइनरी के लिए खोज स्थान बदलें; पर्यावरण परिवर्तनीय डालने की आवश्यकता के बिना बाइनरी को संशोधित करना है ताकि यह आमतौर पर अलग-अलग स्थानों में खोजे; यह रन-टाइम लिंकर में कुछ विशेषताओं का लाभ उठाता है (जो पुस्तकालयों की तलाश में है)।

एक कार्यक्रम कहा जाता है chrpath, जिसे विभिन्न पैकेज प्रबंधकों द्वारा जोड़ा जा सकता है, जो आपको सीधे आरपीएथ संपादित करने की अनुमति देता है। इस मामले में; आप बाइनरी के अतिरिक्त खोज पथ को बदलकर बदल सकते हैं:

chrpath -r "$ORIGIN" foo

इसका मतलब यह है कि कार्यक्रम बाइनरी के समान निर्देशिका में दिखेगा .so फाइलें, इस प्रकार इसे चलाने की अनुमति देती हैं।


संबंधित सवाल
सबसे लोकप्रिय