[C++] क्यूटी निर्माता परियोजना में बाहरी पुस्तकालय जोड़ना


Answers

क्या आप qmake परियोजनाओं का उपयोग कर रहे हैं? यदि ऐसा है, तो आप LIBS चर का उपयोग कर बाहरी पुस्तकालय जोड़ सकते हैं। उदाहरण के लिए:

win32:LIBS += path/to/Psapi.lib
Question

मैं क्यूटी निर्माता आरसी 1 (संस्करण 0.9.2) द्वारा निर्मित एक परियोजना में बाहरी पुस्तकालय कैसे जोड़ सकता हूं? उदाहरण के लिए, Win32 फ़ंक्शन EnumProcesses() को बनाने के लिए प्रोजेक्ट में Psapi.lib को जोड़ा जाना आवश्यक है।




आपके द्वारा दी गई त्रुटि अतिरिक्त अतिरिक्त पथ शामिल होने के कारण है। इसे जोड़ने का प्रयास करें: INCLUDEPATH + = C: \ path \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ सादर।




यदि आप अपने आवेदन को केवल अपने आप उपयोग करने के बजाय ग्राहकों की मशीनों पर अपना आवेदन तैनात करना चाहते हैं, तो हम पाते हैं कि LIBS+= -Lxxx -lyyy विधि समस्याएं नहीं होने पर भ्रम पैदा कर सकती है।

हम क्यूटी का उपयोग कर लिनक्स, मैक और विंडोज के लिए अनुप्रयोग विकसित करते हैं। हम पूर्ण, स्टैंड-अलोन एप्लिकेशन भेजते हैं। इसलिए तैनाती पैकेज में सभी गैर-सिस्टम पुस्तकालयों को शामिल किया जाना चाहिए। हम चाहते हैं कि हमारे ग्राहक सभी ओएस के लिए एक ही यूएसबी स्टिक से एप्लिकेशन चलाने में सक्षम हों। प्लेटफार्म संगतता के कारणों के लिए यूएसबी स्टिक को फिर FAT32 के रूप में स्वरूपित किया जाना चाहिए, जो (लिनक्स) सिम्लिंक का समर्थन नहीं करता है।

हमने LIBS+= -Lxxx -lyyy idiom को एक ब्लैक बॉक्स का बहुत अधिक पाया:

  1. हम बिल्कुल नहीं जानते कि फ़ाइलपैथ (स्थिर या गतिशील) लाइब्रेरी का क्या है जो लिंकर द्वारा पाया गया है। यह असुविधाजनक है। हमारे मैक लिंकर को नियमित रूप से उन लोगों से अलग-अलग libs मिलते हैं जिन्हें हमने सोचा था कि इसका उपयोग किया जाना चाहिए। यह ओपनएसएसएल पुस्तकालयों के साथ कई बार हुआ जहां मैक लिंकर ने हमारे अनुरोधित संस्करण की बजाय अपने स्वयं के पुराने, असंगत - ओपनएसएसएल संस्करण को पाया और उपयोग किया।

  2. हम यह बर्दाश्त नहीं कर सकते कि लिंकर पुस्तकालयों में सिम्लिंक का उपयोग करता है क्योंकि यह तैनाती पैकेज को तोड़ देगा।

  3. हम पुस्तकालय के नाम से देखना चाहते हैं कि हम स्थिर या गतिशील पुस्तकालय को लिंक करते हैं या नहीं।

तो हमारे विशेष मामले के लिए हम केवल पूर्ण फ़ाइलपैथ का उपयोग करते हैं और जांचते हैं कि वे मौजूद हैं या नहीं। हम सभी सिम्लिंक हटा देते हैं।

सबसे पहले हम यह पता लगाते हैं कि हम किस ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं और इसे CONFIG चर में डाल दें। और, उदाहरण के लिए लिनक्स 64 बिट के लिए, फिर:

linux64 {
    LIBSSL= $$OPENSSLPATH/linux64/lib/libssl.a
    !exists($$LIBSSL): error ("Not existing $$LIBSSL")
    LIBS+= $$LIBSSL
    LIBCRYPTO= $$OPENSSLPATH/linux64/lib/libcrypto.a
    !exists($$LIBCRYPTO): error ("Not existing $$LIBCRYPTO")
    LIBS+= $$LIBCRYPTO
}

सभी निर्भरताओं को तैनाती पैकेज में कॉपी किया जा सकता है क्योंकि हम उनके फाइलपाथ जानते हैं।