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


Answers

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

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

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




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




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

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

हमें LIBS+= -Lxxx -lyyy मुहावरे का एक बहुत बड़ा ब्लैक बॉक्स मिला है:

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

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

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

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

सबसे पहले हम यह पता लगा सकते हैं कि हम किस ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं और इसे कन्फिग चर में डाल दिया है। और, उदाहरण के लिए लिनक्स 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
}

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