QMake

2014-12-09 4 views
8

में RPATH ऑर्डर सेट करना मेरे पास एक लिनक्स क्यूटी प्रोग्राम है। मैं इसे निष्पादन योग्य निर्देशिका में (गतिशील) क्यूटी पुस्तकालयों का अधिमान्य रूप से उपयोग करना चाहता हूं यदि वे मौजूद हैं, अन्यथा सिस्टम के क्यूटी libs का उपयोग करें। बचाव के लिए आरपीएटीएच।QMake

मैं के .pro फ़ाइल qmake को यह पंक्ति जोड़ें:

QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN\'' 

और readelf साथ जिसके परिणामस्वरूप निष्पादन को देखकर मैं देख रहा हूँ:

0x000000000000000f (RPATH)    Library rpath: [$ORIGIN:/usr/local/Trolltech/Qt-5.2.0/lib] 
0x000000000000001d (RUNPATH)   Library runpath: [$ORIGIN:/usr/local/Trolltech/Qt-5.2.0/lib] 

सही लगता है, लेकिन ldd दिखाता है कि यह सिस्टम संस्करण का उपयोग कर रहा है:

libQt5Core.so.5 => /usr/local/Trolltech/Qt-5.2.0/lib/libQt5Core.so.5 (0x00007f2d2fe09000) 

मैं मैन्युअल रूप से संपादित करते हैं qmake, दो rpaths के आदेश स्वैप करने के लिए इतना $ मूल/usr/स्थानीय/..., मैं सही व्यवहार के बाद आता है Makefile जिसके परिणामस्वरूप है:

0x000000000000000f (RPATH)    Library rpath: [/usr/local/Trolltech/Qt-5.2.0/lib:$ORIGIN] 
0x000000000000001d (RUNPATH)   Library runpath: [/usr/local/Trolltech/Qt-5.2.0/lib:$ORIGIN] 

libQt5Core.so.5 => ./libQt5Core.so.5 (0x00007fb92aba9000) 

मेरे समस्या है कैसे qmake अंतिम LFLAGS चर का निर्माण करता है। मैं सिस्टम लाइब्रेरी के बाद अपना अतिरिक्त ($ ORIGIN) कैसे डाल सकता हूं, यह नहीं समझ सकता। कोई विचार?

+0

आप सिस्टम पुस्तकालयों पर स्थानीय पुस्तकालयों को क्यों पसंद करना चाहेंगे? सामान्य तैनाती परिदृश्य में जहां आप बाइनरी के साथ पुस्तकालयों को शिप करते हैं, आपके पास स्थानीय या स्थानीय पर स्थानीय है। –

+0

मैं इसे उत्पादन उत्पाद के लिए नहीं करूँगा, लेकिन यह डिबगिंग के लिए उपयोगी है, जहां स्थानीय पुस्तकालय में कुछ अतिरिक्त नैदानिक ​​आउटपुट है (उदाहरण के लिए)। मुझे एहसास है कि मैं सिर्फ एक रैपर स्क्रिप्ट में LD_LIBRARY_PATH की लाइनों के साथ कुछ उपयोग कर सकता हूं, लेकिन मैंने इस QMAke/RPATH खरगोश छेद को कम कर दिया है, और अब मैं उत्सुक हूं कि QMake को मैं क्या करना चाहता हूं ... –

उत्तर

संबंधित मुद्दे