2009-06-08 15 views
5

मेरे पास साझा लाइब्रेरी बुद्धिमान है। मैं अपने प्रोग्राम में इसका उपयोग कैसे कर सकता हूं? क्या मुझे उस पुस्तकालय के शीर्षलेखों को शामिल करने की आवश्यकता है?लिनक्स साझा पुस्तकालय सी ++

मैं लिनक्स के तहत एक्लिप्स के साथ काम करता हूं। मैंने पुस्तकालय में -एल और -एल का उपयोग करके पथ स्थापित किया है। लेकिन कार्यक्रम में मेरा काम दिखाई नहीं दे रहा है।

क्या आप मुझे बता सकते हैं कि साझा लाइब्रेरी कैसे काम करती है?

सम्मान।

संपादित करें:

मैं निम्नलिखित त्रुटि मिलती है:

int main() { 
    char* path = "/export/home/pdmazubi3/workspace/proj1/src/pic.jpg"; 
    CEDD_Descriptor::CEDD ced; // undefined reference to `CEDD_Descriptor::CEDD::CEDD[in-charge]()' 
    ced.execute(path); 
} 

हैडर:

class CEDD 
    { 
     public: 
      CEDD(double Th0, double Th1, double Th2, double Th3,bool CompactDescriptor); 
      CEDD(); 
      ~CEDD(void); 

      double T0; 
      double T1; 
      double T2; 
      double T3; 
      bool Compact; 

      double* execute(char* path); 

     private: 
      int cedd_segnum;    //number of segments 
      int* cedd_partitionSize;  //number of pixels in each segment 
    }; 

उत्तर

10

आप अपने आवेदन में हेडर फाइल और इसके खिलाफ लिंक शामिल करने की जरूरत है।

shared libraries और Linux howto में पुस्तकालयों का उपयोग करने का तरीका देखें।

यदि हेडर फ़ाइल आपके एप्लिकेशन (जो आमतौर पर नहीं है) के समान निर्देशिका में नहीं है तो आपको कंपाइलर को कहां देखना है, आप -I/path/to/include का उपयोग करने के लिए पथ शामिल करने के लिए पथ शामिल करना चाहते हैं फ़ाइल।

लिंक जोड़ने में आपको लाइब्रेरी को इंगित करने की आवश्यकता है। सामान्य उपयोग -L/path/to/lib का उपयोग करना है आपकी लाइब्रेरी वाली निर्देशिका के लिए पथ -l<libname> है जहां <libname> बिना lib के बिना लाइब्रेरी का नाम है। यदि आप libboost_serialization-d-1_34_1.so है आप का प्रयोग करेंगे -lboost_serialization-d-1_34_1

उदाहरण:

g++ -I/sw/include -Wall -g -I/usr/local/include/boost-1_36/ -c main.cpp -o main.o 
g++ -L/sw/lib -lboost_serialization-d-1_34_1 -o x main.o 
+0

कृपया, मेरे कोड – user101375

+0

पर एक नज़र डालें "सीईडीडी_Descriptor :: CEDD :: CEDD [इन-चार्ज]() के लिए अनिर्धारित संदर्भ" लिंकर की तरह लगता है पुस्तकालय में प्रतीक नहीं मिल सकता है, क्या आप -L/लाइब्रेरी का उपयोग करते हैं लिंक करने के लिए/path/to/lib -llibname? – stefanB

0

आप भी शामिल पथ (मैं विकल्प) संशोधित किया है तो यह जानता है पुस्तकालय के लिए हेडर के लिए देखने के लिए कहाँ? यदि आपने ऐसा नहीं किया है तो संकलक कार्य/कक्षाओं/संरचनाओं/आदि को खोजने में असमर्थ होने के बारे में शिकायत करेगा।

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