2010-12-21 4 views
25

मान लीजिए कि मेरे पास फ़ाइल main.cpp है जो sin() फ़ंक्शन का उपयोग करती है जिसे libmath में परिभाषित किया गया है। यह भी मान लें कि हमारे पास libmath.a और libmath.so दोनों एक ही निर्देशिका में उपलब्ध हैं। अब अगर मैं g++ -o main main.cpp -lmath कमांड जारी करता हूं तो लिनक्स का डिफ़ॉल्ट व्यवहार साझा लाइब्रेरी libmath.so से लिंक करना है। मैं जानना चाहता हूं कि साझा लाइब्रेरी को हटाने या स्थानांतरित किए बिना प्रोग्राम को स्थिर पुस्तकालय libmath.a से जोड़ने के लिए मजबूर करने का कोई तरीका है?जब मैं एक ही नाम की साझा लाइब्रेरी मौजूद है, तो मैं एक स्थिर लाइब्रेरी से लिंक कैसे कर सकता हूं

+2

की संभावित डुप्लिकेट [जी ++ लिंकर: यदि स्थिर पुस्तकालय मौजूद है स्थिर जोड़ने के लिए मजबूर? ] (http://stackoverflow.com/questions/3698321/g-linker-force-static-linking-if-static-library-exists) –

उत्तर

20

आपको लिंकर को -स्टैटिक पास करना होगा, लेकिन केवल विशेष पुस्तकालयों के लिए आपको ही जाना होगा। उदाहरण के लिए: इस समारोह

g++ -o main main.cpp -Wl,-Bstatic -lmath -Wl,-Bdynamic 
+3

मुझे लगता है कि आपका मतलब "-स्टैटिक" के बजाय "-बस्टैटिक" है। बहुत खराब एकल चरित्र संपादन की अनुमति नहीं है ... –

+0

निश्चित रूप से यह जीसीसी/binutils के लिए कोई फर्क नहीं पड़ता, -स्टैटिक और -स्टैटिक जीएनयू लिंकर में समानार्थी हैं। – nos

8

अपने लिंकर का समर्थन करता है, तो -l:<filename> आप उपयोग कर सकते हैं:

g++ -o main main.cpp -l:libmath.a 
संबंधित मुद्दे

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