/usr/lib/libstdc++.so.6: संस्करण 'GLIBCXX_3.4.15'


135

मैं उबंटू में GLIBCXX_3.4.15 कैसे प्राप्त कर सकता हूं? मैं कुछ ऐसे कार्यक्रम नहीं चला सकता जिन्हें मैं संकलित कर रहा हूं।

जब मैं करता हूं:

strings /usr/lib/libstdc++.so.6 | grep GLIBC

मुझे मिला:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

किसी भी मदद के लिए धन्यवाद!

जवाबों:


81

मैं स्रोत से gcc 4.6 संकलन कर रहा हूं, और जाहिरा तौर पर

sudo make install 

यह एक पकड़ नहीं था। मैंने चारों ओर खोदा और पाया

gcc/trunk/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.15

मैंने इसे / usr / lib और रीडायरेक्ट libstdc ++ पर कॉपी किया। इसलिए नए को इंगित करने के लिए .6, और सब कुछ काम करता है।


1
मुझे वही समस्या मिली है, और यह पोस्ट / उत्तर वास्तव में वही है जिसकी मुझे तलाश है। आपका बहुत बहुत धन्यवाद!
योको

1
यह gcc 4.6.2 के साथ-साथ यह libstdc ++ को छोड़कर काम करता है। धन्यवाद!
वेन्सेक्ट्रिक्स

2
मेरा gcc 4.7 और libstdc ++ है। इसलिए.6.0.17। एक ही समस्या थी, इस समाधान के साथ तय की गई। कुडोस।
रिकेट

1
हाँ वहाँ है। apt-getइस समस्या का एक आधारित समाधान यहाँ वर्णित है: superuser.com/questions/310809/…
aroth

4
@roosevelt: यह OS के साथ कोई समस्या नहीं है, यह उपयोगकर्ताओं को स्वयं सॉफ़्टवेयर स्थापित करने और फिर लिंकर का सही उपयोग न करने की समस्या है। यह एक अक्सर पूछे जाने वाले प्रश्न है: gcc.gnu.org/oniltocs/libstdc++/faq.html#faq.how_to_set_paths
जोनाथन

54

मैं इस मुद्दे को अतीत में केवल libstdc ++ को इस पैरामीटर के साथ जोड़कर टाल रहा हूं जब इस निष्पादन के साथ g ++ को भेजे गए इस पैरामीटर के साथ:

-static-libstdc++

यदि लाइब्रेरी में स्टेटिकली लिंक करना एक विकल्प है, तो यह संभवतः सबसे तेज़ काम है।


2
बहुत बहुत धन्यवाद, मैंने एसओ पर सुझाए गए हर दूसरे समाधान की कोशिश की और कुछ भी काम नहीं किया लेकिन यह एक।
इटमार काट्ज

1
आपके समाधान के लिए धन्यवाद, यह मुझे बहुत मदद करता है!
ब्राइटशाइन

समस्या यह है कि पुस्तकालय को नहीं पाया जा सकता है, न कि आपको सांख्यिकीय रूप से लिंक करना चाहिए। @Hobo से जवाब देखें।
दान मर्गेन्स

45

मैं काम करने के लिए क्लैंग होने की कोशिश कर रहा था (जिसमें 6.0.15 की भी आवश्यकता होती है), और जब मैंने आसपास पाया तो पाया कि यह स्थापित है /usr/local/lib/libstdc++.so.6.0.15। जब मैंने ग्रेफाइट (एक प्रायोगिक जीसीसी संस्करण) स्थापित किया तो यह वहां स्थापित हो गया।

यदि आपको उस स्थान पर पुस्तकालयों तक पहुंच की आवश्यकता है, तो आपको LD_LIBRARY_PATHनिम्न के रूप में परिभाषित करने की आवश्यकता होगी :

export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/usr/local/lib64:/usr/lib64

मैं ऐसा करने के बाद काम करने में सक्षम था। आशा है कि किसी के लिए उपयोगी है।


मैं एक एम्बेडेड लक्ष्य पर काम कर रहा था और मुझे एक ही समस्या है, आपका समाधान मेरे मामले में काम नहीं करता है। वास्तव में लक्ष्य में अधिकांश बाइनरी डिफ़ॉल्ट सी लाइब्रेरी / इन / लिबास का उपयोग करता है, इसलिए परिवर्तन LD_LIBRARY_PATHउन्हें प्रभावित करेगा। वे सभी नई लाइब्रेरी से जुड़ेंगे, अंत में अधिकांश बायनेरिज़ काम नहीं कर रहे हैं: जैसे कि ls grep, ....: Iam हो रही है:ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
Mouin

14

मैं इस समस्या का सामना करता हूं जब c कोड से m फ़ंक्शन को कॉल करने के लिए matlab eng का उपयोग करने की कोशिश करता हूं। जो कमांड के साथ होता हैmex -f .. ..

मेरा समाधान:

strings /usr/lib/i386-<tab>/libstdc++.so.6 | grep GLIBC

मैंने पाया कि इसमें 3.4.15 शामिल हैं

इसलिए मेरी प्रणाली में सबसे नया काम है।

समस्या matlab से ही आती है, इसे अपना libstdc ++ कहते हैं {MATLAB}/bin

इसलिए, बस इसे अद्यतन प्रणाली के साथ बदलें।


यह मुझे Xluntu 13.04 x64 पर मैटलैब 2013 बी x64 में भी काम करने के लिए लगता है
मार्सिन

बहुत बहुत धन्यवाद। मैं बस में फ़ाइल के लिए एक नया प्रतीकात्मक कड़ी बनाने के लिए किया था {MATLAB}/binमें फाइल करने के लिए /usr/lib/, और फिर पुन: प्रारंभ करने matlab। यह फेडोरा 14 x 64 पर मतलाब 2010 बी में काम करता है।
वॉक

2

मुझे वही त्रुटि मिली। इस तरह से यह मेरे लिए काम किया है:

  • वर्तमान में स्थापित gcc के तहत परियोजना को साफ किया
  • इसे पुनः स्थापित किया

पूरी तरह से काम किया!


2

इस त्रुटि के लिए, मैंने नवीनतम libstdc ++ की प्रतिलिपि बनाई। इसलिए अन्य सर्वर से .6.0.17, और नरम लिंक को हटा दिया और इसे फिर से बनाया।

1. libstdc ++ को कॉपी करें। इसलिए प्रभावित सिस्टम के अन्य सर्वर से.6.0.15 या नवीनतम।
मेरे मामले में SUSE linux 11 SP3 नवीनतम था।
2. rm libstdc ++। So.6
3. ln -s libstdc ++। तो.6.6.1.17 libddc ++। So.6 (under / usr / lib64 निर्देशिका)।

एन ज्वॉय


2

मुझे एलएलवीएम 3.7 संस्करण के निर्माण में इसी तरह के मुद्दे का सामना करना पड़ा है। पहले जांचें कि आपने अपने सिस्टम पर आवश्यक पुस्तकालय स्थापित किया है या नहीं:

$locate libstdc++.so.6.*

फिर अपने $ LD_LIBRARY_PATH पर्यावरण चर में पाया गया स्थान जोड़ें।


2
यह केवल तभी काम करता है, यदि आपके पास एक libstdc ++ है। इसलिए.6। * GLIBCXX_3.4.15 समर्थन के साथ
वारुनपॉव

2

कभी-कभी आप लक्ष्य मशीन को नियंत्रित नहीं करते हैं (उदाहरण के लिए आपकी लाइब्रेरी को लॉक-डाउन एंटरप्राइज़ सिस्टम पर चलाने की आवश्यकता होती है)। ऐसे मामले में आपको जीसीसी के संस्करण का उपयोग करके अपने कोड को फिर से इकट्ठा करना होगा जो उनके GLIBCXX संस्करण से मेल खाती है। उस स्थिति में, आप निम्न कार्य कर सकते हैं:

  1. लक्ष्य मशीन द्वारा समर्थित GLIBCXX के नवीनतम संस्करण को देखें: strings /usr/lib/libstdc++.so.6 | grep GLIBC... कहते हैं कि संस्करण है 3.4.19
  2. संबंधित GCC संस्करण को खोजने के लिए https://gcc.gnu.org/oniltocs/libstdc++/manual/abi.html का उपयोग करें । हमारे मामले में, यह है [4.8.3, 4.9.0)

1

Gcc संस्करण 4.8.1, त्रुटि की तरह लगता है:

/ root / bllvm / build / Release + Asserts / bin / llvm-tblgen: /usr/lib64/libstdc++.so.6: संस्करण `GLIBCXX_3.4.15 - ऐसा नहीं मिला (/ root / bllvm / build / रिलीज़ / रिलीज़ के लिए आवश्यक) bin / LLVM-tblgen)

मुझे libstdc ++ मिल गया। इसलिए मैंने जहां 4.8.1 gcc का अनुपालन किया, उस स्थान पर

फिर मैं ऐसे करता हूं

cp ~/objdir/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.18 /usr/lib64/

rm /usr/lib64/libstdc++.so.6

ln -s libstdc++.so.6.0.18 libstdc++.so.6

समस्या सुलझ गयी।


1

मैंने उन्हें RPM ( libstdc ++ के लिए RPM ) से निकाला है और फिर:

export LD_LIBRARY_PATH=.

वर्तमान निर्देशिका पर पुस्तकालयों की खोज करने के लिए सिस्टम सेट करने के लिए। फिर बस मेरे कार्यक्रम को क्रियान्वित किया। लेकिन मेरे मामले में मुझे एक एकल निष्पादन योग्य मिल गया है जिसकी मुझे ज़रूरत थी, यह एक प्रणाली में व्यापक बदलाव नहीं था।


0

मेरे पास एक समान मुद्दा है, और मैंने इसे libstdc++उस कार्यक्रम में सांख्यिकीय रूप से जोड़कर हल किया है जिसे मैं संकलित कर रहा था, जैसे:

$ LIBS=-lstdc++ ./configure ... etc.

सामान्य के बजाय

$ ./configure ... etc.

इस समाधान के साथ समस्याएँ हो सकती हैं कि रनटाइम पर साझा पुस्तकालयों को लोड करने के साथ, लेकिन मैंने इस मुद्दे पर गहराई से टिप्पणी करने के लिए ध्यान नहीं दिया है।



0

मुझे वही समस्या थी क्योंकि मैंने उपयोगकर्ता को खुद से किसी और के लिए बदल दिया:

सु

किसी कारण से, सामान्य संकलन के बाद मैं इसे निष्पादित नहीं कर पाया (वही त्रुटि संदेश)। अन्य उपयोगकर्ता खाता कार्यों के लिए सीधे ssh।


यह वास्तव में सवाल का जवाब नहीं देता है। यदि आपका कोई अलग प्रश्न है, तो आप प्रश्न पूछें पर क्लिक करके पूछ सकते हैं । आप इस प्रश्न पर अधिक ध्यान आकर्षित करने के लिए एक इनाम भी जोड़ सकते हैं ।
रैवॉन

नहीं यह नहीं है क्योंकि मैं एक ही समस्या थी। यह उपयोगकर्ता को बदलने के कारण हुआ था। यह किसी और के साथ भी हो सकता है, जड़ को बदलते हुए कहें।
नमस्ते 10

मेरी गलती! मुझे पहली पंक्ति द्वारा फेंक दिया गया था, जिसे देखकर आपको भी समस्या थी। लगे रहो!
रावण

मैंने उबंटू का भी उपयोग किया और कार्यक्रमों को संकलित करने का भी प्रयास किया और प्रश्न में भी वही त्रुटि संदेश मिला। मेरी त्रुटि यह थी कि मैं सु कमांड का उपयोग करके इसे दूसरे उपयोगकर्ता खाते में कर रहा था। मुझे लगता है कि यह सवाल का जवाब देता है क्योंकि यह समस्या के बारे में क्यों और कैसे पता करता है। यह निश्चित रूप से एक संभावना है।
हेलोवर्ल्ड

और एक उपयोगकर्ता के पास नए उपयोगकर्ता को खोजने के लिए LD_LIBRARY_PATH सेट था, लेकिन दूसरा उपयोगकर्ता नहीं था? ऐसा लगता है कि इस सवाल के विशिष्ट संदर्भ में थोड़ा दूर है।
मार्क ग्लिससे

0

मेरे पास स्थापित संकलक के कई संस्करण थे और डिफ़ॉल्ट स्थापना की तुलना में अधिक हाल के संस्करण का उपयोग करने की आवश्यकता थी। चूंकि मैं हमारे लिनक्स सिस्टम के लिए सिस्टम प्रशासक नहीं हूं, इसलिए मैं ऊपर दिए गए अन्य सुझावों में से सिर्फ / usr / lib या कई बदलाव नहीं कर सकता। मैं इस समस्या का सामना कर रहा था और अंततः 64-बिट लाइब्रेरी (lib64) निर्देशिका के बजाय 32-बिट लाइब्रेरी निर्देशिका के लिए मेरा पथ सेट करने के लिए इसे ट्रैक किया। चूंकि 32-बिट निर्देशिका में पुस्तकालय असंगत थे, सिस्टम पुराने संस्करण में डिफ़ॉल्ट रूप से डिफ़ॉल्ट था जो पुराना था।

मैं जिस मार्ग का उल्लेख कर रहा था, उसके लिए -L का उपयोग करना "असंगत libstdc ++ को लंघन करने के बारे में चेतावनी देता है। इसलिए जब -lstdc ++ खोज रहा है"। यह संकेत था जिसने मुझे समस्या को हल करने में मदद की।


0

जीसीसी संस्करण के साथ एक ही बात 4.8.1 (GCC)और libstdc++.so.6.0.18। यहाँ इसे /usr/lib/x86_64-linux-gnuमेरे ubuntu बॉक्स पर कॉपी करना था ।


0

मेरे मामले में LD_LIBRARY_PATH के पास / usr / lib64 पहले / usr / स्थानीय / lib64 था। (मैं llvm 3.9 का निर्माण कर रहा था)।
नया gcc संकलक जिसे मैंने llvm 3.9 संकलित करने के लिए संस्थापित किया था / lr / usr / local / lib64 के तहत नए GLIBCXX पुस्तकालयों का उपयोग करते हुए पुस्तकालयों में था, इसलिए मैंने लिंकर / us / स्थानीय / lib64 को देखने के लिए लिंकर के लिए LD_LIBRARY_PATH को निर्धारित किया।
इससे यह समस्या हल हो गई।


0

मैंने सिर्फ निर्माण के दौरान -static-libstdc ++ का उपयोग किया था। w / कि, मैं a.out चला सकता हूं

g++ test.cpp -static-libstdc++

0

परीक्षण प्रयोजनों के लिए:

मूल मशीन पर, लाइब्रेरी ढूंढें, निष्पादन योग्य के समान निर्देशिका में कॉपी करें:

$ ldconfig -p | grep libstdc
        libstdc++.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
        libstdc++.so.6 (libc6) => /usr/lib32/libstdc++.so.6
$ cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 .

फिर उसी लाइब्रेरी को लक्ष्य मशीन में कॉपी करें, और निष्पादन योग्य चलाएं:

LD_LIBRARY_PATH=. ./myexecutable

नोट: ऊपर दिया गया आदेश अस्थायी है; यह सिस्टम-व्यापी परिवर्तन नहीं है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.