2010-10-25 11 views
8

के साथ पुस्तकालयों से लिंक करना मैं समझ रहा हूं कि मेरी सी ++ परियोजनाओं में गैर मानक पुस्तकालयों का उपयोग कैसे करें। मेरे कुछ प्रश्न हैं।सी ++ मेकफ़ाइल (newbe)

आइए कहें कि मैं पीओसीओ लाइब्रेरी का उपयोग करना चाहता हूं। इसलिए मैंने इसे डाउनलोड किया और इसे बनाने (स्थिर निर्माण) का उपयोग करके इसे बनाया। अब मेरे पास .o फ़ाइलें और .h फ़ाइलें हैं। विभिन्न निर्देशिकाओं में एक पथ.h फ़ाइल और Path.o फ़ाइल है।

अब मैं इस कोड का उपयोग अपने कोड में करना चाहता हूं। तो मैं #include "Poco/Path.h" का उपयोग कर फ़ाइल शामिल करता हूं। क्या मुझे मेकफ़ाइल संशोधित करना है और मेरे लक्ष्य में पथ.ओ जोड़ना है?

मानक पुस्तकालय का उपयोग करते समय क्या होता है? क्या वे केवल हेडर फाइलों में उपलब्ध हैं? मुझे पता है कि टेम्पलेट कोड precompiled नहीं किया जा सकता है। बाकी के बारे में क्या ?

उत्तर

10

.h और .o फ़ाइलों के अलावा, आपके पास शायद एक या अधिक libXXX.a और/या libXXX.so फ़ाइलें भी होंगी। ये वास्तविक लाइब्रेरी फाइलें हैं जिनके लिए आपके आवेदन को लिंक करना चाहिए।

लाइब्रेरी का उपयोग करने के लिए, आप अपनी स्रोत फ़ाइल में प्रासंगिक शीर्षलेख शामिल करते हैं, और आप लिंकर को बताने के लिए अपना मेकफ़ाइल बदलते हैं कि इसे आपके एप्लिकेशन को XXX लाइब्रेरी से भी लिंक करना चाहिए। उस के लिए सामान्य लिंकर-कमांड -lXXX है और लिंकर libXXX.a और libXXX.so दोनों की तलाश करेगा और जो भी सबसे उपयुक्त लगता है उसका उपयोग करेगा।

मानक पुस्तकालय बाहरी पुस्तकालयों से वास्तव में अलग नहीं है, सिवाय इसके कि आपको इसे स्पष्ट रूप से लिंकर को निर्दिष्ट नहीं करना है।

+0

तो .a फ़ाइल एक स्थिर पुस्तकालय है और इसलिए गतिशील/साझा है? – Seba

+0

@ सेबा: हाँ, यह सही है। –

+0

बहुत बहुत धन्यवाद :) – Seba

8

आपका प्रश्न यह इंगित करता है कि आपके पास पहले से ही आपके कोड के लिए मेकफ़ाइल है। यदि ऐसा है, तो हाँ, आपको उस मेकफ़ाइल में अपने निष्पादन योग्य के लिए नियम को संशोधित करना चाहिए। जैसा कि बार्ट वैन इंजेन शेंगेऊ बताते हैं, पीओसीओ मेकफ़ाइल शायद ऑब्जेक्ट्स फ़ाइलों को Poco/Libraries/libPoco.a जैसे पुस्तकालयों में इकट्ठा कर लेता है, इसलिए आपको उन ऑब्जेक्ट फ़ाइलों को चुनने की बजाय उन्हें उपयोग करना चाहिए। उदाहरण के लिए, यदि अभी अपने नियम में लिखा है:

foo: foo.o bar.o 
    g++ -lSomeLibrary $^ -o [email protected] 

आप इसे

foo: foo.o bar.o 
    g++ -lSomeLibrary -LPoco/Libraries -lPoco $^ -o [email protected] 

(अपने प्रश्न, के दूसरे भाग में बदल जानी चाहिए है "क्या होता है ... क्या बाकी के बारे में?" मुझे अस्पष्ट।)

नोट:#include "Poco/Path.h" पर यह एक बुरा विचार है। यह आपके कोड को निर्देशिका संरचना पर निर्भर करता है, जिसकी परवाह नहीं है। यह #include "Path.h" के लिए बहुत बेहतर है और संकलक को कहां मिलना है: g++ -c -IPoco ...

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

  • कोई संबंधित समस्या नहीं^_^