/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

আমি উত্স থেকে জিসিসি 4.6 সংকলন করছি, এবং দৃশ্যত

sudo make install 

এই ধরেনি। আমি চারপাশে খনন করে পেয়েছি

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

আমি এটিকে / usr / lib এ অনুলিপি করেছি এবং libstdc ++ পুনঃনির্দেশিত করেছি তাই নতুনটির দিকে ইঙ্গিত করতে, এবং এখন সবকিছু কাজ করে।


1
আমি একই সমস্যা পেয়েছি, এবং এই পোস্ট / উত্তর ঠিক আমি যা খুঁজছি তা হ'ল। অনেক ধন্যবাদ!
ইয়োকো

1
এটি জিসিসি 4.6.2 এর সাথে কাজ করে তবে এটি লাইবস্টিডি ++ ব্যতীত .6..0.০.১6। ধন্যবাদ!
ভেনেসেক্ট্রিক্স

2
খনিটি জিসিসি ৪.7 এবং লিবিস্টডিসি ++। So.6.0.17। একই সমাধান ছিল, এই সমাধান দিয়ে স্থির। যশ।
রিবিট

1
হ্যা এখানে. apt-getএই সমস্যার একটি ভিত্তিক সমাধান এখানে বর্ণিত হয়েছে: superuser.com/questions/310809/…
aroth

4
@ রোজভেল্ট: এটি ওএসের সমস্যা নয়, ব্যবহারকারীরা নিজেরাই সফ্টওয়্যার ইনস্টল করার পরে লিংকটিকে সঠিকভাবে ব্যবহার না করার ক্ষেত্রে সমস্যা। এটি একটি এফএকিউ: gcc.gnu.org/onlinesocs/libstdc++/faq.html#faq.how_to_set_paths
জোনাথন

54

আমার এক্সিকিউটেবলের সাথে লিঙ্ক করার সময় আমি জি ++ তে পাঠানো এই প্যারামিটারের সাথে libstdc ++ স্ট্যাটিকালি লিঙ্ক করে এই সমস্যাটি এড়িয়ে চলেছি:

-static-libstdc++

স্থিতিশীলভাবে লাইব্রেরিতে সংযোগ স্থাপন যদি একটি বিকল্প হয় তবে এটি সম্ভবত দ্রুততম কাজ।


2
অনেক অনেক ধন্যবাদ, আমি এসও-তে প্রস্তাবিত প্রতিটি অন্যান্য সমাধান চেষ্টা করেছি এবং এটির ব্যতীত আর কিছুই কার্যকর হয়নি।
ইটামার কাটজ

1
আপনার সমাধানের জন্য ধন্যবাদ, এটি আমাকে অনেক সাহায্য করে!
ব্রাইটশাইন

সমস্যাটি হ'ল লাইব্রেরিটি খুঁজে পাওয়া যায় না, এটি নয় যে আপনার স্ট্যাটিকালি লিঙ্ক করা উচিত। @ হাবো থেকে উত্তর দেখুন।
ড্যান মার্জেন্স

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

আমি এটি করার পরে ঝাঁকুনি পেতে সক্ষম হয়েছি। আশা করি এটি কারও সহায়ক হবে।


আমি একটি এম্বেড থাকা লক্ষ্য নিয়ে কাজ করছি এবং আমি একই সমস্যা পেয়েছি, আপনার সমাধানটি আমার ক্ষেত্রে কাজ করে না বলে মনে হচ্ছে। বাস্তবে লক্ষ্যমাত্রার বেশিরভাগ বাইনারি / lib এ ডিফল্ট সি লাইব্রেরি ব্যবহার করে, সুতরাং পরিবর্তনগুলি LD_LIBRARY_PATHতাদের প্রভাবিত করবে। তারা সকলেই নতুন লাইব্রেরিতে লিঙ্ক করবে, শেষ পর্যন্ত বেশিরভাগ বাইনারি কাজ করছে না: যেমন ls grep, ....: আমি ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
পাচ্ছি

14

সি কোড থেকে এম ফাংশনগুলি কল করতে ম্যাটল্যাব ইঞ্জিন ব্যবহার করার চেষ্টা করার সময় আমি এই সমস্যার মুখোমুখি হয়েছি। যা কমান্ড সহ ঘটেmex -f .. ..

আমার সমাধান:

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

আমি এটিতে 3.4.15 অন্তর্ভুক্ত পেয়েছি

সুতরাং আমার সিস্টেমে নতুন libs আছে।

সমস্যাটি মাতলাব থেকেই আসে, এটি নিজের লিবিস্টডিকে ++ বলে so তাই from থেকে {MATLAB}/bin

সুতরাং, কেবল এটি আপডেট হওয়া সিস্টেম lib দিয়ে প্রতিস্থাপন করুন।


এটাও Xubuntu 13.04 x64 উপর মতলব 2013b x64 আমার জন্য কাজ বলে মনে হয়
মার্সিন

অনেক ধন্যবাদ. আমাকে কেবলমাত্র ফাইলটির জন্য ফাইলটিতে একটি নতুন প্রতীকী লিঙ্ক তৈরি {MATLAB}/binকরতে হয়েছিল /usr/lib/, এবং তারপরে মাতলাব পুনরায় চালু করতে হবে । এটি ফেদোরা 14 x64 এ মতলব 2010 বি তে কাজ করে।
কাজের জায়গায়

2

আমি একই ত্রুটি পেয়েছি। এটি আমার পক্ষে এভাবে কাজ করেছিল:

  • বর্তমানে ইনস্টল করা জিসিসির অধীনে প্রকল্পটি পরিষ্কার করেছেন
  • এটি পুনরুদ্ধার

নিখুঁতভাবে কাজ করেছেন!


2

এই ত্রুটির জন্য, আমি অন্যান্য সার্ভার থেকে সর্বশেষে libstdc ++ অনুলিপি করেছি, এবং নরম লিঙ্কটি সরিয়ে এটিকে পুনরায় তৈরি করেছি।

1. libstdc ++। So.6.0.15 বা অন্যান্য সার্ভার থেকে আক্রান্ত সিস্টেমে সর্বশেষতম অনুলিপি করুন।
আমার ক্ষেত্রে সস লিনাক্স 11 এসপি 3 সর্বশেষ ছিল।
2. আরএম লিবিস্টডিসি ++। So.6
3. ln -s libstdc ++ so.6.0.17 libstdc ++। So.6 (/ usr / lib64 ডিরেক্টরিতে)।

nJoy


2

আমি সবেমাত্র অনুরূপ ইস্যু বিল্ডিং এলএলভিএম 3.7 সংস্করণে মুখোমুখি হয়েছি। আপনি আপনার সিস্টেমে প্রয়োজনীয় লাইব্রেরি ইনস্টল করেছেন কিনা তা প্রথমে পরীক্ষা করে দেখুন:

$locate libstdc++.so.6.*

তারপরে খুঁজে পাওয়া যায় এমন অবস্থানটি আপনার $ LD_LIBRARY_PATH এনভায়রনমেন্ট ভেরিয়েবলে যুক্ত করুন।


2
এটি কেবলমাত্র কাজ করে, যদি আপনার কাছে একটি লিবিস্টডিসি ++ থাকে so..6। * জিবিলিবিএক্সএক্সএক্স_3.4.15 সমর্থন সহ লাইব
warunapww

2

কখনও কখনও আপনি লক্ষ্য মেশিনটি নিয়ন্ত্রণ করেন না (যেমন আপনার লাইব্রেরির একটি লক-ডাউন এন্টারপ্রাইজ সিস্টেমে চালানো দরকার)। এই জাতীয় ক্ষেত্রে আপনাকে জিসিসির যে সংস্করণটি তাদের জিআইএলবিএক্সএক্সএক্স সংস্করণটির সাথে মিল রেখে ব্যবহার করে আপনার কোডটি পুনরায় সংকলন করতে হবে। সেক্ষেত্রে, আপনি নিম্নলিখিতগুলি করতে পারেন:

  1. লক্ষ্য মেশিন দ্বারা সমর্থিত GLIBCXX এর সর্বশেষ সংস্করণটি দেখুন: strings /usr/lib/libstdc++.so.6 | grep GLIBC... সংস্করণটি বলুন 3.4.19
  2. সংশ্লিষ্ট জিসিসি সংস্করণটি পেতে https://gcc.gnu.org/onlinesocs/libstdc++/manual/abi.html ব্যবহার করুন । আমাদের ক্ষেত্রে, এটি হয় [4.8.3, 4.9.0)

1

জিসিসি সংস্করণ ৪.৮.১, ত্রুটিটি দেখে মনে হচ্ছে:

/ রুট / bllvm / বিল্ড / রিলিজ + asserts / bin / llvm-tblgen: /usr/lib64/libstdc++.so.6: সংস্করণ LI GLIBCXX.4.4.15 'পাওয়া যায় নি (সংকেত / root / bllvm / বিল্ড / রিলিজ + অ্যাসেটস / বিন / llvm-tblgen)

যেখানে আমি জিসিসি ৪.৮.১ মেনেছি সেখানে I.০.১.১৮ পেয়েছি

তাহলে আমি এই মত করি

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

আমার একই সমস্যা ছিল কারণ আমি ব্যবহারকারীকে নিজের থেকে অন্য কারও কাছে পরিবর্তন করেছি:

su কমান্ড

কিছু কারণে, সাধারণ সংকলন করার পরে আমি এটি কার্যকর করতে সক্ষম হই নি (একই ত্রুটি বার্তা)। সরাসরি অন্য ব্যবহারকারীর অ্যাকাউন্টে কাজ করে sh


এটি আসলে প্রশ্নের উত্তর দেয় না। আপনি কি অন্য কিছু প্রশ্ন থাকে, তাহলে আপনি এটি ক্লিক করে অনুরোধ করতে পারেন প্রশ্ন জিজ্ঞাসা করুন । আপনি এই প্রশ্নের আরও মনোযোগ আকর্ষণ করার জন্য একটি অনুগ্রহ যুক্ত করতে পারেন ।
রাভ্রন

না এটি না কারণ আমার ঠিক একই সমস্যা ছিল। এটি ব্যবহারকারী পরিবর্তনের কারণে ঘটেছিল। এটি অন্য কারও সাথেও ঘটতে পারে, বলুন রুটে পরিবর্তন করুন।
হ্যালো ওয়ার্ল্ড

আমার ভুল! আমি প্রথম লাইনে ফেলেছি, যা দেখে মনে হচ্ছে আপনারও সমস্যা আছে had বহন!
রাভ্রন

আমি উবুন্টুও ব্যবহার করেছি এবং প্রোগ্রামগুলি সংকলনের চেষ্টা করেছি এবং প্রশ্নের মতোই ত্রুটি বার্তা পেয়েছি। আমার ত্রুটিটি হ'ল আমি su কমান্ডটি ব্যবহার করে এটি অন্য ব্যবহারকারীর অ্যাকাউন্টে করছিলাম। আমি মনে করি এটি প্রশ্নের উত্তর দেয় কারণ এটি কেন এবং কীভাবে সমস্যা সম্পর্কে সম্বোধন করে। এটা অবশ্যই একটি সম্ভাবনা।
হ্যালো ওয়ার্ল্ড

এবং একজন ব্যবহারকারীর LD_LIBRARY_PATH আরও নতুন lib সন্ধান করার জন্য সেট করা আছে তবে অন্য ব্যবহারকারীকে নয়? এই প্রশ্নের সুনির্দিষ্ট প্রসঙ্গে এটি কিছুটা দূরে সঞ্চারিত বলে মনে হচ্ছে।
মার্ক গ্লিস

0

আমার কাছে জিসিসি সংকলকটির একাধিক সংস্করণ ইনস্টল করা আছে এবং এটি ডিফল্ট ইনস্টলেশনগুলির চেয়ে সাম্প্রতিক সংস্করণটি ব্যবহার করার দরকার ছিল। যেহেতু আমি আমাদের লিনাক্স সিস্টেমগুলির জন্য কোনও সিস্টেম প্রশাসক নই, আমি কেবল উপরে / usr / lib বা উপরের অন্যান্য পরামর্শগুলি পরিবর্তন করতে পারি না। আমি এই সমস্যার মুখোমুখি হয়েছি এবং অবশেষে এটি track৪-বিট লাইব্রেরি (lib64) ডিরেক্টরিটির পরিবর্তে 32-বিট লাইব্রেরি ডিরেক্টরিতে আমার পথ নির্ধারণ করতে ট্র্যাক করেছি। যেহেতু 32-বিট ডিরেক্টরিতে পাঠাগারগুলি অসম্পূর্ণ ছিল তাই সিস্টেমটি পুরানো সংস্করণে ডিফল্ট হয়েছিল যা পুরানো।

আমি যে পথে উল্লেখ করছি -L ব্যবহার করে "বেমানান libstdc ++ এড়িয়ে যাওয়া" সম্পর্কে সতর্কতা দেওয়া হয়েছিল। সুতরাং -lstdc ++ অনুসন্ধান করার সময় "। এই ইঙ্গিতটিই আমাকে শেষ পর্যন্ত সমস্যার সমাধান করতে সহায়তা করেছিল।


0

জিসিসি সংস্করণ 4.8.1 (GCC)এবং একই জিনিস libstdc++.so.6.0.18/usr/lib/x86_64-linux-gnuএটি আমার উবুন্টু বাক্সে এখানে অনুলিপি করতে হয়েছিল।


0

আমার ক্ষেত্রে এলডি_লিবিআরএআইপিএটিএইচ / ইউএসআর / স্থানীয় / লিব 64 এর আগে প্রথমে / ইউএসআর / লিব 64 ছিল 64 (আমি llvm 3.9 প্রস্তুত ছিল)।
Llvm 3.9 সংকলনের জন্য আমি যে নতুন জিসিসি সংকলকটি ইনস্টল করেছি তাতে / usr / স্থানীয় / lib64 এর অধীনে আরও নতুন GLIBCXX লাইব্রেরি ব্যবহার করে লাইব্রেরি ছিল তাই আমি লিঙ্কারের জন্য প্রথমে / usr / স্থানীয় / lib64 দেখার জন্য LD_LIBRARY_PATH স্থির করেছিলাম।
এই সমস্যার সমাধান।


0

আমি বিল্ড করার সময় সবেমাত্র -static-libstdc ++ ব্যবহার করেছি। ডাব্লু / যে, আমি চালাতে পারি

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

দ্রষ্টব্য: উপরের কমান্ডটি অস্থায়ী; এটি কোনও সিস্টেম-ব্যাপী পরিবর্তন নয়।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.