wake-up-neo.net

Wie zu beheben: /usr/lib/libstdc++.so.6: Version GLIBCXX_3.4.15 nicht gefunden

Deshalb bin ich jetzt verzweifelt dabei, eine Lösung zu finden. Ich kompiliere eine gemeinsam genutzte Bibliothek .so in Ubuntu 32 Bit (habe es unter Debian und Ubuntu 64 Bit versucht, aber es hat auch nicht funktioniert)

Ich bekomme immer: /usr/lib/libstdc++.so.6: version ``GLIBCXX_3.4.15' not found jedes Mal, wenn ich versuche, mein Plugin zu laden.

So bekomme ich diesen Fehler:

  1. Installieren Sie das neueste Ubuntu 32-Bit
  2. Sudo apt-get install build-essential
  3. Plugin kompilieren und laden (.so)

Hier sind einige Links, die ich gefunden und ausprobiert habe, aber keiner hat für mich funktioniert:

(Meine alte Frage: Ich habe es einige Tage nach der Veröffentlichung dieser Frage irgendwie behoben, aber ich kann mich nicht erinnern, wie genau ich es getan habe.) 

Meine Frage

Ein anderer Benutzer mit dem gleichen Problem

Und ein anderer

Ich sehe einige Leute, die das Problem behoben haben, indem Sie libstdc ++ (ich denke) in ein Verzeichnis verschieben und dann idk zeigen, was auf dieses Verzeichnis verweist, aber das hat mich nur verwirrt.

Weiß jemand einen Fix?

(Edit:) - Beim Ausführen: strings /usr/lib/libstdc++.so.6 | grep GLIBC im Terminal wird Folgendes angezeigt: strings '/usr/lib/libstdc++.so.6': No such file. Könnte das das Problem sein? Und wenn ja, wie installiere ich diese Bibliothek?

(Edit2 :) Kennt jemand noch eine Lösung?

(Edit3) Benötigt immer noch eine Lösung. Gibt es eine Möglichkeit zu sehen, auf welcher Distribution eine Shared Library kompiliert wurde? Ich weiß, dass ich dieselbe Bibliothek vor einiger Zeit kompiliert habe, mich aber nicht erinnern kann !!

(Edit4) ldd my_lib_.so gibt mir:

    linux-gate.so.1 =>  (0xb77d7000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb76c1000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb76a4000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74fa000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb74ce000)
    /lib/ld-linux.so.2 (0xb77d8000)

ldd program_im_loading_so_into gibt mir:

    linux-gate.so.1 =>  (0xb77d8000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb77c0000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb77a5000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb76bb000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb768f000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb7672000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74c9000)
    /lib/ld-linux.so.2 (0xb77d9000)

laufen strings /usr/lib/i386-linux-gnu/libstdc++.so.6 | grep GLIBCXX gibt mir:

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
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH

und zum Schluss hier meine gcc-Version:

`gcc version 4.6.4 (Ubuntu/Linaro 4.6.4-1ubuntu1~12.04)`
51
user1667191

Statische Verknüpfung zu libstdc ++ mit der Option -static-libstdc++ gcc.

36
kerim

Ich habe dieses Problem behoben, indem ich Folgendes installiert habe: Sudo apt-get install libstdc++6

In meinem Fall bin ich nach der Installation von MongoDB 3.0.1 auf dieses Problem gestoßen

mongo: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: Version `GLIBCXX_3.4.18 'nicht gefunden (für mongo erforderlich)

6
Shubhamoy

Installieren Sie einfach die neueste Version aus einem nicht-fehlerhaften Repository:

$ Sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ Sudo apt-get update
$ Sudo apt-get install libstdc++6-4.7-dev
5
luart

dieses Problem kann durch die Installation der neuesten Version von libstdc ++ gelöst werden.

$ Sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ Sudo apt-get update
$ Sudo apt-get install libstdc++6-7-dbg
4
weiyixie

Sie haben oben erwähnt, dass Sie Ihre Kompilierung als Teil Ihrer Schritte zum Reproduzieren zusammengestellt haben, aber unten haben Sie einen Bearbeitungssatz mit den folgenden Worten gemacht: 

"Gibt es eine Möglichkeit zu sehen, auf welcher Distribution eine Shared Library kompiliert wurde?"

Ob Sie dies auf derselben Distribution kompiliert haben oder nicht, und sogar eine andere Version derselben Distribution, ist ein wichtiges Detail, insbesondere für C++ - Anwendungen.

Das Verlinken auf C++ - Bibliotheken, einschließlich libstdc ++, kann, soweit ich das beurteilen kann, gemischte Ergebnisse haben. Hier ist eine verwandte Frage zum erneuten Kompilieren mit verschiedenen Versionen von C++.

Müssen wir Bibliotheken mit C++ 11 neu kompilieren?

Wenn Sie auf einer anderen Distribution (und möglicherweise einer anderen gcc-Version) gegen C++ kompiliert haben, kann dies zu Problemen führen.

Ich denke, du hast zwei Möglichkeiten:

  1. Ihre beste Wette: Kompilieren Sie Ihre .so erneut, wenn Sie sie nicht in Ihrem aktuellen System kompiliert haben. Wenn in der Systemumgebung Ihrer Laufzeitumgebung ein Problem auftritt, wird dies möglicherweise sogar beim Kompilieren angezeigt.
  2. Bündeln Sie die C++ - Bibliotheken Ihres anderen Compilers zusammen mit Ihrer Anwendung. Dies ist möglicherweise nur möglich, wenn es sich um dieselbe Distribution handelt ... Aber es ist ein nützlicher Trick, wenn Sie Ihren eigenen Compiler gerollt haben. Sie müssen auch LD_LIBRARY_PATH in den Pfad setzen und exportieren, der die gebündelten stdc ++ - Bibliotheken enthält, wenn Sie diese Route verwenden. 
2
yggdrasil

Wenn jemand das gleiche Problem hat wie ich - stellen Sie sicher, dass Sie nicht von Ubuntu 14.04 auf einem 12.04-Computer installieren - dasselbe Problem. Durch die Neuinstallation aus dem richtigen Repository wurde das Problem behoben.

1
Rob Quist

Das hat für mich funktioniert:

cp <path_to>/libstdc++.so.6 $PWD
./<executable>

Dieses Leckerbissen stammt von @kerin (oben angegebener Kommentar):

sie könnten auschecken http://stackoverflow.com/questions/13636513/linking-libstdc-static-any-gotchas

Von diesem Link:

Wenn Sie die neuere Version von libstdc ++ in demselben Verzeichnis wie die ausführbare Datei ablegen, wird sie zur Laufzeit gefunden. Das Problem wurde behoben.

Der Fehler wurde mir erwähnt, dass libstdc ++. So.6 von/usr/lib64/stammte, aber dies ist nicht die Bibliothek, mit der ich verlinkt habe! Die Nachricht sah wie folgt aus:

<executing_binary>: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by <executing_binary>)

Ich habe überprüft, dass LD_LIBRARY_PATH das Verzeichnis hatte (und dass es der erste Pfad war). Aus irgendeinem Grund sah es zur Laufzeit immer noch nach /usr/lib64/libstdc++.so.6.

Ich habe den Ratschlag aus dem obigen Artikel übernommen und die libstdc ++. So.6 von dort kopiert, wo ich mich mit meiner ausführbaren Datei in das Verzeichnis verlinke, von dort aus lief und es funktionierte!

0
nikc

Vielleicht ist die Antwort auf diese Frage auch hier nützlich: Wie finde ich libstdc ++. So.6: die GLIBCXX_3.4.19 für RHEL 6 enthalten?

curl -O http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6-4.7-dbg_4.7.2-5_i386.deb
ar -x libstdc++6-4.7-dbg_4.7.2-5_i386.deb && tar xvf data.tar.gz
mkdir backup
cp /usr/lib/libstdc++.so* backup/
cp ./usr/lib/i386-linux-gnu/debug/libstdc++.so.6.0.17 /usr/lib
ln -s libstdc++.so.6.0.17 libstdc++.so.6
0
Serge Rogatch