2013-05-30 11 views
9

कुछ समय पहले, मैंने कुछ सी ++ 11 सुविधाओं पर प्रारंभिक शुरुआत करने के लिए जीसीसी 4.8 में अपग्रेड करने का निर्णय लिया था। हालांकि, मुझे थोड़ा सा पता चला, हालांकि, कुछ दिनों पहले एक परियोजना तक उपयोग करने के लिए वास्तव में किसी भी नई सुविधाओं का उपयोग नहीं किया गया था (नया कंपाइलर ठीक काम कर रहा था, लेकिन ऐसा इसलिए हो सकता है क्योंकि मैं इसका उपयोग नहीं कर रहा था कोई नई कार्यक्षमता।)जीसीसी 4.8 के साथ libstdC++ को कैसे कॉन्फ़िगर करें?

इस नई परियोजना में, जब मैंने = std = C++ 11 ध्वज के साथ संकलित किया, तो मुझे कोई समस्या नहीं थी। हालांकि, क्रम में, मैं त्रुटि मिलती है:

./main: /usr/lib/i386-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.18' not found (required by ./main)`

मुझे लगता है कि वहाँ एक और अधिक आधुनिक libstdC++ जीसीसी 4.8 के साथ जुड़े पुस्तकालय के लिए लिंक करने में समस्या यह है कि, लेकिन मैं मुझे के जीवन के लिए बाहर कैसे नहीं लगा सकते हैं इसे ठीक करें या जहां उचित पुस्तकालय होना चाहिए। मैं प्रतीकात्मक जी ++ और जीसीसी-4.8 है, जो, काम कर रहा है के लिए जीसीसी बाइनरी जोड़ने याद g++ -v रिटर्न के बाद से:

Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/app/gcc/4.8.0/libexec/gcc/i686-pc-linux-gnu/4.8.0/lto-wrapper Target: i686-pc-linux-gnu Configured with: ./gcc-4.8.0/configure --prefix=/app/gcc/4.8.0 Thread model: posix gcc version 4.8.0 (GCC)

एक और धागा ऑनलाइन मेरे नेतृत्व में कार्यक्रम के लिए ldd उत्पादन है, जो किया को देखने के लिए मुझे दिखाएं कि libstdC++ पुस्तकालयों के लिए निर्देशिका संरचना बाइनरी के लिए निर्देशिका संरचना से अलग थी। हालांकि, मैं बाद में उचित libstdc++ पुस्तकालयों को नहीं ढूंढ सका, इसलिए मुझे यकीन नहीं है कि कहां देखना है। ldd main के लिए उत्पादन होता है:

./main: /usr/lib/i386-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.18' not found (required by ./main) linux-gate.so.1 => (0xb7791000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb768e000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb7662000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb7644000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb749b000) /lib/ld-linux.so.2 (0xb7792000)`

मुझे यकीन है कि वह जगह है जहाँ यह गलत जा रहा है नहीं कर रहा हूँ, और मैं Googling जारी है और जवाब के लिए चारों ओर देख कर देंगे, लेकिन किसी भी मदद तुम लोगों पेशकश कर सकता बहुत सराहना की जाएगी। अगर इस मुद्दे के बारे में कुछ अस्पष्ट नहीं है या मैं कुछ जानकारी भूल गया हूं, तो बस मुझे बताएं और मैं इसे जोड़ने की कोशिश करूंगा। बहुत बहुत धन्यवाद!

+0

संभावित डुप्लिकेट [लिंकिंग जी ++ 4.8 से libstdC++] (http://stackoverflow.com/questions/17220872/linking-g-4-8-to-libstdc) –

उत्तर

13

आपको लाइब्रेरी को खोजने के लिए अपने डायनामिक लिंकर (यह आपके द्वारा चलाए जाने पर निष्पादित किया गया है) कहने की आवश्यकता है। लाइब्रेरी के पथ पर LD_LIBRARY_PATH सेट करें (शायद /app/gcc/4.8.0/lib या कुछ के नीचे कहीं भी)।

find /app/gcc/4.8.0 -name "libstdc++.so.6" का उपयोग करें। निर्देशिका को अपने LD_LIBRARY_PATH में जोड़ें। उदाहरण के साथ मैंने उल्लेख किया:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/app/gcc/4.8.0/lib (यदि आप बोर्न-जैसे खोल का उपयोग कर रहे हैं जो लिनक्स पर डिफ़ॉल्ट है)।

फिर अपने प्रोग्राम को चलाने का प्रयास करें।

यदि यह काम करता है, तो संभवतः आप LD_LIBRARY_PATH का उपयोग किये बिना निर्देशिका में देखने के लिए अपने गतिशील लिंकर को कॉन्फ़िगर करना चाहेंगे। पथ को कॉन्फ़िगर करने के बारे में विवरण के लिए man ld.so देखें।

+0

बिल्कुल सही, तुरंत काम किया! मुझे यकीन नहीं है कि मैंने/usr/lib में mucking के बजाय संबद्ध lib निर्देशिका में क्यों नहीं देखा था ... हिंडसाइट हमेशा 20/20 है। वैसे भी, धन्यवाद, मैं वास्तव में मदद की सराहना करता हूं! – paul

+0

http://stackoverflow.com/questions/17220872/linking-g-4-8-to-libstdc –

+0

@Guillaume तो ld.so कैसे काम करता है? क्या आप टर्मिनल से 'ld.so --library-path/app/gcc/4.8.0/lib' चलाते हैं और यह हमेशा उस उपयोगकर्ता के लिए सिस्टम पर हर जगह से जादुई रूप से प्रयोग किया जाता है जैसे कि यह 'LD_LIBRARY_PATH' पर था ? यदि हां, तो 'LD_LIBRARY_PATH' का उपयोग करने से बेहतर क्यों है? –

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