/usr/lib/libstdc++.so.6: `` GLIBCXX_3.4.15 '' sürümü bulunamadı


135

Ubuntu'da GLIBCXX_3.4.15'i nasıl edinebilirim? Derlediğim bazı programları çalıştıramıyorum.

Ben yaparken:

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

Alırım:

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

Herhangi bir yardım için teşekkürler!

Yanıtlar:


81

Gcc 4.6'yı kaynaktan derliyorum ve görünüşe göre

sudo make install 

Bunu yakalamadım. Etrafı kazdım ve buldum

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

/ Usr / lib dizinine kopyaladım ve libstdc ++ 'ı yeniden yönlendirdim.


1
Aynı problemim var ve bu gönderi / cevap tam olarak aradığım şey. Çok teşekkürler!
yoco

1
Bu, libstdc ++ dışında gcc 4.6.2 ile de çalışır. Teşekkürler!
Venesectrix

2
Benimki gcc 4.7 ve libstdc ++ 'dır. Aynı sorun vardı, bu çözüm ile düzeltildi. Kudos.
Ricbit

1
Evet var. Bir apt-getbu soruna dayalı çözüm burada tarif edilir: superuser.com/questions/310809/...
aroth

4
@roosevelt: İşletim sistemi ile ilgili bir sorun değil, kullanıcıların yazılımı kendileri yükledikten sonra bağlayıcıyı doğru kullanmamaları bir sorun. Bu bir SSS: gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths
Jonathan Wakely

54

Geçmişte sadece çalıştırılabilir bağlanırken g ++ gönderilen bu parametre ile statik olarak libstdc ++ bağlayarak bu sorunu önlüyor olmuştur:

-static-libstdc++

Kütüphanede statik olarak bağlantı kurmak bir seçenekse, bu muhtemelen en hızlı çözümdür.


2
Çok teşekkürler, SO üzerinde önerilen her diğer çözümü denedim ve hiçbir şey bu çalıştı.
Itamar Katz

1
Çözümünüz için teşekkürler, bana çok yardımcı oluyor!
Brightshine

Sorun, statik olarak bağlamanız gerektiği değil, kitaplığın bulunamamasıdır. @Hobo'nun cevabına bakınız.
Dan Mergens

45

(Ayrıca 6.0.15 gerektirir) çalışmak için clang almaya çalışıyordum ve etrafında alay ederken yüklü bulundu /usr/local/lib/libstdc++.so.6.0.15. Grafit (deneysel bir gcc versiyonu) kurduğumda kuruldu.

Bu konumdaki kitaplıklara erişmeniz gerekiyorsa, şu şekilde tanımlamanız gerekir LD_LIBRARY_PATH:

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

Bunu yaptıktan sonra clang'ı çalıştırabildim. Umarım bu birisine yardımcı olur.


Yerleşik bir hedef üzerinde çalışıyordum ve aynı sorunu alıyorum, çözümünüz benim durumumda çalışmıyor gibi görünüyor. Aslında, hedefteki ikili dosyaların çoğu / lib içindeki varsayılan c kütüphanesini kullanır, bu nedenle değiştirmek LD_LIBRARY_PATHonları etkiler. hepsi yeni kütüphaneye bağlantı verecek, Sonunda ikili dosyaların çoğu çalışmıyor: gibi ls grep, ....: Ben alıyorum:ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
Mouin

14

C kodundan m işlevleri çağırmak için matlab eng kullanmaya çalışırken bu sorunla karşılaşıyorum. komutla gerçekleşenmex -f .. ..

Çözümüm:

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

3.4.15 içerdiğini buldum

bu yüzden sistemim en yeni kütüphanelere sahip.

sorun matlab'ın kendisinden geliyor, kendi libstdc ++ adını veriyor. {MATLAB}/bin

bu yüzden sadece güncellenmiş sistem lib ile değiştirin.


Bu da benim için Matlab 2013b x64'te Xubuntu'da çalışıyor gibi görünüyor 13.04 x64
Marcin

Çok teşekkürler. Sadece dosya için yeni bir simgesel bağlantı oluşturmak zorunda {MATLAB}/bindosyaya /usr/lib/, sonra ve yeniden başlatma Matlab'de. Bu, Matlab 2010b'de Fedora 14 x64'te çalışır.
Wok

2

Aynı hatayı aldım. Benim için böyle çalıştı:

  • şu anda kurulu gcc altında projeyi temizledi
  • tekrar derledi

Mükemmel çalıştı!


2

Bu hata için, diğer sunucudan en son libstdc ++.

1. libstdc ++. So.6.0.15 veya son sürümünü diğer sunucudan etkilenen sisteme kopyalayın.
Benim durumumda SUSE linux 11 SP3 en son sürümüne sahipti.
2. rm libstdc ++. So.6
3. ln -s libstdc ++. So.6.0.17 libstdc ++. So.6 (/ usr / lib64 dizini altında).

Njoy


2

LLVM 3.7 versiyonunu oluştururken benzer sorunlarla karşılaştım. önce gerekli kitaplığı sisteminize yükleyip yüklemediğinizi kontrol edin:

$locate libstdc++.so.6.*

Ardından bulunan konumu $ LD_LIBRARY_PATH ortam değişkeninize ekleyin.


2
Bu yalnızca, GLIBCXX_3.4.15 desteğiyle bir libstdc ++. So.6. * Lib'niz varsa çalışır
warunapww

2

Bazen hedef makineyi kontrol etmezsiniz (örneğin, kütüphanenizin kilitli bir kurumsal sistemde çalışması gerekir). Böyle bir durumda, kodunuzu GLIBCXX sürümlerine karşılık gelen GCC sürümünü kullanarak yeniden derlemeniz gerekir. Bu durumda, aşağıdakileri yapabilirsiniz:

  1. Hedef makine tarafından desteklenen GLIBCXX ürününün en son sürümüne bakın: strings /usr/lib/libstdc++.so.6 | grep GLIBC... Sürümü söyleyin 3.4.19.
  2. İlgili GCC sürümünü bulmak için https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html adresini kullanın . Bizim durumumuzda, bu [4.8.3, 4.9.0).

1

gcc sürüm 4.8.1, hata şöyle görünür:

/ root / bllvm / build / Release + Ekler / bin / llvm-tblgen: /usr/lib64/libstdc++.so.6: sürüm `GLIBCXX_3.4.15 'bulunamadı (/ root / bllvm / build / Release + Asserts / bin / LLVM-tblgen)

Gcc 4.8.1'e uyduğum yerde libstdc ++. So.6.0.18'i buldum

Sonra bunu beğendim

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

sorun çözüldü.


1

Onları bir RPM ( libstdc ++ için RPM) ayıkladım ve sonra:

export LD_LIBRARY_PATH=.

Sistemi geçerli dizindeki kitaplıkları arayacak şekilde ayarlamak için. Sonra programımı yürüttüm. Ama benim durumumda ihtiyacım olan tek bir çalıştırılabilir dosya aldım, sistem çapında bir değişiklik değildi.


0

Benzer bir sorun yaşadım ve statik libstdc++olarak derlediğim programa bağlayarak çözdüm , şöyle:

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

her zamanki yerine

$ ./configure ... etc.

Paylaşılan kitaplıkların çalışma zamanında yüklenmesi ile ilgili bu çözümle ilgili sorunlar olabilir, ancak konuya yorum yapmak için yeterince derinlemesine bakmadım.



0

Aynı sorunu yaşadım çünkü kullanıcıyı kendimden başkasına değiştirdim:

su

Bazı nedenlerden sonra, normal derleme yapamadım (aynı hata mesajı). Doğrudan ssh diğer kullanıcı hesabına çalışır.


Bu soruya gerçekten cevap vermiyor. Farklı bir sorunuz varsa Soru Sor'u tıklayarak bunu sorabilirsiniz . Bu soruya daha fazla dikkat çekmek için bir ödül de ekleyebilirsiniz .
ravron

Hayır, çünkü aynı problemi yaşadım. Bunun nedeni kullanıcıyı değiştirmektir. Kök değiştirerek başka birine de olabilirdi.
HelloWorld

Benim hatam! İlk satır tarafından atıldım, ki bu da problemin varmış gibi görünüyordu. Sürdürmek!
ravron

Ayrıca Ubuntu'yu kullandım ve programları derlemeye çalıştım ve aynı sorudaki hata mesajını da aldım. Benim hatam su komutunu kullanarak başka bir kullanıcı hesabında yapıyordu oldu. Bunun soruyu cevapladığını düşünüyorum, çünkü sorunun nedenini ve nasıl olduğunu ele alıyor. Kesinlikle bir olasılık.
HelloWorld

Ve bir kullanıcının LD_LIBRARY_PATH yeni lib'i bulmasını sağladı, ancak diğer kullanıcıyı değil mi? Bu sorunun özel bağlamında biraz ileriye götürülmüş gibi görünüyor.
Marc Glisse

0

Gcc derleyicisinin birden çok sürümünü yükledim ve varsayılan yüklemeden daha yeni bir sürümü kullanmam gerekiyordu. Linux sistemlerimiz için sistem yöneticisi olmadığımdan, / usr / lib veya yukarıdaki diğer önerilerin çoğunu değiştiremiyorum. Bu sorunla karşılaşıyordum ve sonunda 64-bit kütüphane (lib64) dizini yerine 32-bit kütüphane dizinine giden yolumu ayarlamak için izledim. 32-bit dizindeki kitaplıklar uyumsuz olduğundan, sistem varsayılan olarak eski olan eski sürüme ayarlanmıştır.

Başvurduğum yola -L kullanmak "uyumsuz libstdc ++ atlamak hakkında uyarılar verdi. -Lstdc ++ için arama yaparken". Nihayet problemi çözmeme yardımcı olan ipucuydu.


0

Gcc sürümü ile aynı şey 4.8.1 (GCC)ve libstdc++.so.6.0.18. /usr/lib/x86_64-linux-gnuBenim ubuntu kutusunda buraya kopyalamak zorunda kaldı .


0

Benim durumumda LD_LIBRARY_PATH, önce / usr / local / lib64'ten önce / usr / lib64'e sahipti. (Ben 3.9 llvm kaynıyordu).
Llvm 3.9 derlemek için yüklediğim yeni gcc derleyicisi, / usr / local / lib64 altında daha yeni GLIBCXX kitaplıklarını kullanan kitaplıklara sahipti.
Bu sorunu çözdü.


0

Ben sadece inşa ederken -static-libstdc ++ kullandım. w / bu, a.out çalıştırabilir

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

0

Test amacıyla:

Orijinal makinede kitaplığı bulun, yürütülebilir dosyayla aynı dizine kopyalayın:

$ 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 .

Ardından aynı kütüphaneyi hedef makineye kopyalayın ve yürütülebilir dosyayı çalıştırın:

LD_LIBRARY_PATH=. ./myexecutable

Not: yukarıdaki komut geçicidir; sistem çapında bir değişiklik değildir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.