2009-04-05 14 views
94

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

उत्तर

196

यह करने के लिए उचित तरीके से इस तरह है:

LIBS += -L/path/to -lpsapi 

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

मामले में आप परियोजना निर्देशिका में अपने lib फ़ाइलों को स्टोर करना चाहते हैं, तो आप उन्हें $$_PRO_FILE_PWD_ चर के साथ संदर्भित कर सकते हैं, जैसे:

LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi 
+6

यह इस पोस्ट के लिए सही जवाब है। – sivabudh

+3

+1 क्योंकि यह क्रॉस प्लेटफ़ॉर्म समाधान पर विचार करता है, सबसे पूरा उत्तर। – morde

+2

क्या लाइब्रेरी पथ के रूप में पर्यावरण चर निर्दिष्ट करना संभव है? मैं पूछ रहा हूं क्योंकि .pro फ़ाइल में हार्डकोडेड पथ नाम लिखना चीजों को तोड़ देगा यदि एक परियोजना कई लोगों द्वारा विकसित की जाती है, जिनके पास एक ही स्थान पर सभी पुस्तकालय स्थापित नहीं हो सकते हैं। – antred

20

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

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

लंगड़ा प्रश्न के लिए खेद है, लेकिन क्या psapi लाइब्रेरी पहले से ही पूर्वनिर्धारित होनी चाहिए या QtCreator इसे बनाने का ख्याल रखेगा? – Dfr

5

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

10

LIBS + = C: \ Program Files \ OpenCV \ lib

काम नहीं करेगा क्योंकि आप प्रोग्राम फ़ाइलों में श्वेत-स्थान का उपयोग कर रहे हैं। इस मामले में आपको उद्धरण जोड़ना होगा, इसलिए परिणाम इस तरह दिखेगा: LIBS + = "सी: \ प्रोग्राम फ़ाइलें \ OpenCV \ lib"। मैं गैर सफेद-अंतरिक्ष स्थानों ;-)

+0

क्यूटी (निर्माता) के नवीनतम संस्करण हमेशा (सिंगल) निर्देशिका विभाजक के रूप में आगे slashes चाहते हैं।एकमात्र अपवाद तब होता है जब आप विंडोज के तहत "सिस्टम" कमांड का उपयोग करते हैं। फिर आपको सिस्टम को एक पिछड़ा पिछड़ा स्लैश खिलाने की ज़रूरत है, जो दो पिछड़े स्लैश कहने के लिए है। दो पिछड़े स्लैश के साथ सभी आगे की स्लैश को प्रतिस्थापित करने के लिए निम्नानुसार किया जा सकता है: 'WINDIR = $$ DIR',' WINDIR ~ = s, /, \\, g' – adlag

3

और जोड़ने के लिए कई पुस्तकालय फाइलों में रखकर पुस्तकालयों आप नीचे के रूप में लिख सकते हैं की सिफारिश:

INCLUDEPATH * = ई:/DebugLibrary/VTK ई:/DebugLibrary/VTK/आम ई:/DebugLibrary/VTK/छनन ई:/DebugLibrary/VTK/GenericFiltering ई:/DebugLibrary/VTK/ग्राफिक्स ई:/DebugLibrary/VTK/GUISupport/क्यूटी ई:/DebugLibrary/VTK/हाइब्रिड ई:/डीबग लाइब्रेरी/वीटीके/इमेजिंग ई:/डीबग लाइब्रेरी/वीटीके/आईओ ई:/डीबग्लब्रेरी/वीटीके/समांतर ई:/डीबग्लब्रेरी/वीटीके/रेंडरिंग ई:/डीबग्लब्रेरी/वीटीके/यूटिलिटीज ई:/DebugLibrary/VTK/VolumeRendering ई:/DebugLibrary/VTK/विजेट ई:/DebugLibrary/VTK/

LIBS रैपिंग * = -ले:/DebugLibrary/VTKBin/bin/रिहाई -lvtkCommon -lvtksys - lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering

1

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

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

हम LIBS+= -Lxxx -lyyy मुहावरा भी एक ब्लैक बॉक्स की ज्यादा पाया:

  1. हम वास्तव में नहीं पता है कि filepath (स्थिर या गतिशील) पुस्तकालय कि लिंकर द्वारा पाया गया है की है। यह असुविधाजनक है। हमारे मैक लिंकर को नियमित रूप से उन लोगों से अलग-अलग 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 
} 

सभी निर्भरता तैनाती पैकेज में कॉपी किया जा सकता, क्योंकि हम उनकी filepaths पता है।

0

मैं पूर्णता की बोरी के लिए जोड़ना चाहता हूं कि आप केवल लाइब्रेरी पैथ भी जोड़ सकते हैं जहां यह एक निर्भर पुस्तकालय की तलाश करेगा (जिसे सीधे आपके कोड में संदर्भित नहीं किया जा सकता है लेकिन आपके द्वारा उपयोग की जाने वाली लाइब्रेरी की आवश्यकता हो सकती है) ।

तुलना के लिए, यह LIBPATH पर्यावरण के अनुरूप होगा लेकिन क्यूटी निर्माता में इसकी तरह अस्पष्ट है और अच्छी तरह से प्रलेखित नहीं है।

तरह से मैं इस के आसपास आया था पीछा कर रहा है:

LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/" 

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

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