2009-06-01 19 views
16

के लिए क्यूटी अनुप्रयोग का द्विआधारी वितरण कैसे करें मैं क्रॉस-प्लेटफ़ॉर्म क्यूटी एप्लिकेशन विकसित कर रहा हूं। यह फ्रीवेयर है हालांकि ओपन-सोर्स नहीं। इसलिए मैं इसे एक संकलित बाइनरी के रूप में वितरित करना चाहता हूं।लिनक्स

विंडोज़ पर कोई समस्या नहीं है, मैं अपने संकलित exe को मिनजीडब्ल्यू और क्यूटी के डीएलएल के साथ पैक करता हूं और सबकुछ बढ़िया हो जाता है।

लेकिन लिनक्स पर एक समस्या है क्योंकि उपयोगकर्ता ने अपने सिस्टम में पुस्तकालयों को मेरे से बहुत अलग साझा किया हो सकता है।

क्यूटी परिनियोजन मार्गदर्शिका दो विधियों का सुझाव देती है: स्थिर लिंकिंग और साझा पुस्तकालयों का उपयोग करना। पहला विशाल निष्पादन योग्य बनाता है और कई पुस्तकालयों के स्थिर संस्करणों की भी आवश्यकता होती है जो क्यूटी पर निर्भर करता है, यानी मुझे उन सभी को खरोंच से पुनर्निर्माण करना होगा। दूसरी विधि एप्लिकेशन स्टार्टअप से ठीक पहले गतिशील लिंकर को पुन: कॉन्फ़िगर करने पर आधारित है और मुझे थोड़ा मुश्किल लगता है।

क्या कोई भी लिनक्स के तहत क्यूटी अनुप्रयोगों को वितरित करने में अपना अनुभव साझा कर सकता है? मुझे किस विधि का उपयोग करना चाहिए? मुझे किस समस्या का सामना करना पड़ सकता है? क्या यह काम करने के लिए कोई और तरीका है?

उत्तर

12

आप लिनक्स पर क्यूटी साझा पुस्तकालयों को भी वितरित कर सकते हैं। फिर, अपने सॉफ़्टवेयर को सिस्टम डिफ़ॉल्ट के बजाय उनको लोड करने के लिए प्राप्त करें। साझा पुस्तकालयों को LD_LIBRARY_PATH पर्यावरण परिवर्तक का उपयोग करके अधिक से अधिक सवार किया जा सकता है। यह शायद आपके लिए सबसे आसान समाधान है। आप इसे अपने निष्पादन योग्य के लिए हमेशा एक रैपर स्क्रिप्ट में बदल सकते हैं।

वैकल्पिक रूप से, केवल उस न्यूनतम लाइब्रेरी संस्करण को निर्दिष्ट करें जिसे आपके उपयोगकर्ताओं को सिस्टम पर स्थापित करने की आवश्यकता है।

3

नहीं जैसे एक जवाब (sybreon कवर कि), लेकिन कृपया ध्यान रखें कि जब तक आप एक वाणिज्यिक लाइसेंस खरीदा है नहीं, अपने द्विआधारी वितरित करने के लिए अनुमति दी है अगर यह स्थिर क्यूटी के खिलाफ जुड़ा हुआ है अन्यथा अपने पूरे द्विआधारी गिर रहे हैं, जीपीएल के तहत (या आप क्यूटी के लाइसेंस का उल्लंघन कर रहे हैं।)

यदि आपके पास वाणिज्यिक लाइसेंस है, तो कभी भी ध्यान न दें।

आप एक वाणिज्यिक लाइसेंस की जरूरत नहीं है, तो आप दो विकल्प हैं:

  1. क्यूटी v4.5.0 या नए (LGPL संस्करणों के खिलाफ लिंक गतिशील - आप खुले में छोड़कर पिछले संस्करणों उपयोग नहीं कर सकते स्रोत ऐप्स), या

  2. अपना स्रोत कोड खोलें।

4

जब हम लिनक्स पर क्यूटी ऐप्स वितरित (या वास्तव में है कि साझा पुस्तकालयों का उपयोग किसी भी एप्लिकेशन) हम एक निर्देशिका वृक्ष जो साझा पुस्तकालयों युक्त उप-निर्देशिका के साथ शीर्ष पर वास्तविक निष्पादन योग्य और संबद्ध आवरण स्क्रिप्ट शामिल जहाज और कोई अन्य आवश्यक संसाधन जो आप लिंक नहीं करना चाहते हैं।

ऐसा करने का लाभ यह है कि आप उपयोगकर्ता को पर्यावरण चर सेट करने के बारे में चिंता किए बिना एप्लिकेशन चलाने के लिए आवश्यक रैपर स्क्रिप्ट सेटअप कर सकते हैं , किसी विशिष्ट स्थान पर स्थापित करें, आदि। यदि सही तरीके से किया जाता है, तो यह आपको इस बारे में चिंता करने की अनुमति नहीं देता है कि आप कहां से कॉल कर रहे हैं क्योंकि यह हमेशा फिन डी संसाधनों।

हम वास्तव में प्लेटफॉर्म/आर्किटेक्चर उप-निर्देशिकाओं में सभी निष्पादन योग्य और साझा पुस्तकालयों को रखकर इस वृक्ष संरचना को और भी लेते हैं ताकि रैपर स्क्रिप्ट स्थानीय वास्तुकला को निर्धारित कर सके और उस प्लेटफ़ॉर्म के लिए उपयुक्त निष्पादन योग्य को कॉल कर सके और पर्यावरण चर सेट करें उपयुक्त साझा पुस्तकालयों को खोजने के लिए। एक सामान्य फ़ाइल सिस्टम साझा करने वाले कई अलग-अलग लिनक्स संस्करणों के वितरण के दौरान हमने यह सेटअप विशेष रूप से सहायक पाया।

यह सब कहा जा रहा है, हम तब भी स्थिर रूप से निर्माण करना पसंद करते हैं, क्यूटी ऐप्स कोई अपवाद नहीं है। आप निश्चित रूप से क्यूटी के साथ स्थिर रूप से निर्माण कर सकते हैं और आपको अपनी प्रतिक्रिया में उल्लेख की गई क्रबीर्ड के रूप में बहुत सी अतिरिक्त निर्भरताओं का निर्माण नहीं करना चाहिए।

3

sybreon's answer वही है जो मैंने किया है। आप या तो अपने पुस्तकालयों को हमेशा LD_LIBRARY_PATH पर जोड़ सकते हैं या आप कुछ और अधिक फैंसी कर सकते हैं:

अपनी शिपिंग Qt लाइब्रेरी प्रति एक निर्देशिका सेट अप करें। एक शेल स्क्रिप्ट लिखें, इसे ldd निष्पादन योग्य और grep पर 'नहीं मिला' के लिए, उन पुस्तकालयों में से प्रत्येक के लिए, एक सूची में उचित निर्देशिका जोड़ें (चलो इसे $ एलडीडी कहते हैं)। आपके पास सब कुछ होने के बाद, LD_LIBRARY_PATH के साथ बाइनरी चलाएं, इसके पिछले मूल्य और $ LDD पर सेट करें।

अंत में एक टिप्पणी "मुझे उन सभी को खरोंच से पुनर्निर्माण करना होगा"। नहीं, आपको नहीं करना पड़ेगा। यदि आपके पास उन पुस्तकालयों के लिए देव पैकेज हैं, तो आपके पास .a फ़ाइलें होनी चाहिए, आप इनके खिलाफ स्थिर रूप से लिंक कर सकते हैं।

-1

इस आलेख में इस विषय पर जानकारी है। -platform लिनक्स LSB-जी ++

  • लिंकिंग किया जाना चाहिए -lsb उपयोग-डिफ़ॉल्ट-लिंकर साथ साथ

    • कॉन्फ़िगर क्यूटी: मैं इसे अपने आप कोशिश करेंगे: http://labs.trolltech.com/blogs/2009/06/02/deploying-a-browser-on-gnulinux/

      कुछ शब्दों में

    • पैकेज सब कुछ और की तैनाती ( यहाँ कुछ बदलाव की आवश्यकता होगी, लेकिन मैं अभी तक खेद यह प्रयास नहीं किया है)
  • 15

    साझा लाइब्रेरी जाने का तरीका है, लेकिन आप LD_LIBRARY_PATH (जिसमें लॉन्चर शेल स्क्रिप्ट आदि का उपयोग कर एप्लिकेशन चलाने में शामिल है) -rpath कंपाइलर ध्वज के साथ अपनी बाइनरी का निर्माण करने से बच सकते हैं, जिससे आप अपने पुस्तकालयों को स्टोर कर सकते हैं।

    उदाहरण के लिए, मैं अपनी बाइनरी के बगल में या मेरी बाइनरी के बगल में "mylib" नामक निर्देशिका में अपनी लाइब्रेरी स्टोर करता हूं। मेरी qmake फाइल पर इस का उपयोग करने के लिए, मैं .pro फ़ाइल में इस पंक्ति जोड़ें:

    QMAKE_LFLAGS += -Wl,-rpath,\\$\$ORIGIN/lib/:\\$\$ORIGIN/../mylib/ 
    

    और मैं अपने स्थानीय लाइब्रेरी में ऐसी कोई प्रणाली पुस्तकालय अधिभावी के साथ मेरी बाइनरी चला सकते हैं, और एक लांचर स्क्रिप्ट के लिए कोई आवश्यकता नहीं होती।

    0

    आप QtCreator फ़ोल्डर में देख सकते हैं और इसे एक उदाहरण के रूप में उपयोग कर सकते हैं। qt.conf और qtcreator.shमें QtCreator/bin में फ़ाइलें हैं।

    lib/qtcreator सभी आवश्यक Qt * .so पुस्तकालयों वाला फ़ोल्डर है। संबंधित पथ qtcreator के अंदर सेट है।श, जो you-app-name.sh

    आयात, प्लगइन्स, qmlबिन निर्देशिका के अंदर हैं करने के लिए नाम दिया जाना चाहिए। उनके लिए पथ qt.conf फ़ाइल में सेट है। QML अनुप्रयोग परिनियोजन के लिए इसकी आवश्यकता है।

    1

    लिनक्स पर एक क्यूटी अनुप्रयोग पैकेज बनाने का शायद सबसे आसान तरीका शायद linuxdeployqt है। यह सभी आवश्यक फाइलों को एकत्र करता है और आपको AppImage बनाने देता है जो अधिकांश लिनक्स वितरणों पर चलता है।

    सुनिश्चित करें कि आप सबसे पुराने अभी भी समर्थित उबंटू एलटीएस रिलीज पर एप्लिकेशन बनाते हैं, इसलिए आपका ऐप इमेज AppImageHub पर सूचीबद्ध किया जा सकता है।