Ich versuche ein C ++ - Ubuntu-Projekt über Matlab hier zu kompilieren. Wenn ich versuche, es nach dem Kompilieren mit dem Befehl make zu verwenden, erhalte ich den folgenden Fehler:
%Vor%Ich bin mit diesen Prozessen nicht vertraut, daher konnte ich die verschiedenen vorgeschlagenen Lösungen nicht verstehen, wie das . Was genau ist libstdc ++ und GLIBCXX und wie kann ich das Problem lösen?
Ich versuche, das Problem mit dem vorgeschlagenen Link von nkjt: Aber aufgrund des Mangels an Unix-Shell-Wissen verstehe ich nicht, was ich in den Befehl schreiben soll. Ich habe libstdc ++ .a und .so Datei gefunden, die im GCC-Ordner Mein Matlab-Fehler existiert jedoch immer noch. Ich benutze Ubuntu 12.04 Version mit gcc 4.6 und Matlab r2011a. EDIT: Ich habe die Matlab-Version auf r2012a aktualisiert, das Problem ist immer noch das gleiche. Ich habe auch folgendes versucht: Ich konnte die Datei, in der die Datei bereits existiert, nicht erstellen. Die Ausgabe von usr / lib / libstdc ++. so.6 | grep GLIBC: Wie kann ich sicherstellen, dass ich die richtige Version von libstdc ++ definiert habe? /usr/lib/gcc/i686-linux-gnu/4.6
ist und ich versuche Folgendes:
Matlab (und eine Menge anderer kommerzieller Programme wie Steam, Mathematica usw.) liefert seine eigene Version des libstdc ++ so:
%Vor%Das Problem ist, dass wenn Sie Matlab starten, es zuerst lädt, und da es geladen wird, wird diese Version verwendet, um alle Abhängigkeiten des dynamischen Ladeprogramms aufzulösen.
Sie haben mit Ihrem System GCC kompiliert und mit dem neueren libstdc ++ Ihres Systems verbunden. Die resultierende Binärdatei fordert dann Symbole einer bestimmten (neueren) Version an und der Lader findet sie nicht in der bereits geladenen Version (d. H. Matlab).
Es gibt zwei Möglichkeiten, dies zu lösen:
1a. Löschen / benennen Sie Matlabs libstdc ++ so um und verknüpfen Sie die Version Ihres Systems mit dem exakt gleichen Namen:
%Vor%1b. Lösche die Matlab-Version und lass den OS-Lader das libstdc ++ des Systems aufnehmen:
%Vor% 1c. Verwenden Sie die Umgebungsvariable LD_PRELOAD
, um die Systemversion von libstdc ++ vor allem anderen in die Ausführungsumgebung zu "injizieren", was verhindert, dass die alte Matlab-Version geladen wird:
update-alternatives
), um diese anstelle des GCC des Systems zu verwenden. Beachten Sie, dass Sie für 1-3 möglicherweise auf dieselbe Weise mit zusätzlichen Bibliotheken wie libgcc_s.so
umgehen müssen.
Der Grund dafür, dass die neue Version verwendet wird, liegt an dem Symbolversionsschema, das in libstdc ++ intern verwendet wird (daher auch die detaillierte Fehlermeldung, die die Version angibt). Ein ähnlicher "Fix" muss für Steam auf z.B. Arch Linux, wo mehrere von Steam verwendete Systembibliotheken mit dem neueren libstdc ++ verknüpft sind.
Die eigentliche Lösung ist, dass Matlab die libstdc ++ nicht so versendet und stattdessen die vom Betriebssystem bereitgestellte Version verwendet.