2012-05-25 15 views
13

im जी ++ का उपयोग कर एक विंडोज़ cygwin मंच पर एक साझा पुस्तकालय का निर्माण, और बाद में एक और सीपीपी फ़ाइल से लिंक करने की कोशिश कर: मैं निम्न कमांड का उपयोग करें:इमारत और एक साझा पुस्तकालय जोड़ने

// generate object file 

g++ -g -c -Wall -fPIC beat11.cpp -o beat11.o 

// to generate library from the object file 

g++ -shared -Wl,-soname,libbeat.so.1 -o libbeat.so.1.0.1 beat11.o -lc 

// to link it with another cpp file; -I option to refer to the library header file 

g++ -L. -lbeat -I . -o checkbeat checkbeat.cpp 

जबकि जोड़ने, निम्न त्रुटि अप फसलों:

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: 
    cannot find -llibbeat.so.1.0.1 

collect2: ld returned 1 exit status 

पुस्तकालय ठीक बनाया जाता है, लेकिन मैं केवल libbeat.so.1.0.1 पा सकते हैं, libbeat.so या libbeat.so.1 नहीं (या वे करने के लिए नहीं जा सकते वहाँ रहें?)

अन्य प्रश्नों में से एक libbeat.so.1.0.1 करने के लिए एक सिमलिंक बनाने का सुझाव है, लेकिन वह भी काम नहीं किया

उत्तर

13

जब -l<libname> का उपयोग कर लिंक करने के लिए पुस्तकालय निर्दिष्ट करने के लिए, लिंकर पहले lib<libname>.so के लिए lib<libname>.a को खोजने से पहले खोज करेंगे।

आपके मामले में यह काम नहीं करता है, क्योंकि लाइब्रेरी फ़ाइल नाम .so प्रत्यय के साथ नहीं है।

आप बना सकते हैं simlink

libbeat.so -> libbeat.so.1.0.1 

या

libbeat.so -> libbeat.so.1 
libbeat.so.1 -> libbeat.so.1.0.1 

तुम भी उपयोग कर सकते हैं -l:libbeat.so.1.0.1 (अपने लिंकर यह समर्थन करता है तो, -l पैरामीटर का man ld विवरण में जाँच)। अन्यथा लिंकर प्रतीकों नहीं मिल सकता है - एक अन्य विकल्प के बिना -l

g++ -o checkbeat checkbeat.cpp -I . -L. libbeat.so.1.0.1 

ध्यान दें कि पुस्तकालय आप लिंक अपने प्रतीकों का उपयोग वस्तु/स्रोत फ़ाइल के बाद रखा जाना चाहिए पुस्तकालय निर्दिष्ट करने के लिए है।

+0

मुझे एक ही समस्या थी और आपकी टिप्पणी का उपयोग -l: libname.so ने किया था। हालांकि, मैं वास्तव में समझ में नहीं आता कि यह एल --lname के साथ क्यों काम नहीं करता है जैसा कि आपने कहा था कि लिंकर को lib भी खोजना चाहिए। यह भी मेरी समझ थी कि इसे काम करना चाहिए लेकिन कम से कम साइगविन के साथ यह मामला प्रतीत नहीं होता है। अन्य compilers के साथ कोशिश नहीं की है। – Devolus

+0

यहां दिए गए उत्तर ने मेरी मदद की: http://stackoverflow.com/questions/16154130/cygwin-g-linker-doesnt-find-shared-library – solstice333

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