g++ und GLIBCXX - welche Version wird genommen?



  • Im Urzustand hatte ich g++ in der Version 4.4.3 installiert.

    Außerdem in /usr/lib/ die libstdc++.so.6.0.13.

    Das Problem hierbei war, dass ich für ein anderes System (gleiche Distribution) eine Applikation kompilieren musste. Ich hab also ganz normal kompiliert und die resultierende Binary aufs System kopiert. Dann kam aber immer eine Meldung wie "'GLIBCXX_3.4.11' not found (required by xxx)".

    Der Befehl "strings (dateiname_der_binary) | grep GLIB" hat ausgegeben:

    GLIBC_2.1
    GLIBC_2.0
    GLIBC_2.4
    GLIBC_2.1.3
    GLIBCXX_3.4.11
    GLIBCXX_3.4
    

    Da war ja dann auch besagte 3.4.11 dabei.

    Dann hab ich mal geschaut, was für eine libstdc++ auf dem System installiert is (in /usr/lib/) und es war die libstdc++.so.6.0.9. Im Internet hab ich gelesen, dass die ab g++ Version 4.2.4 dabei ist. Also hab ich mir den Sourcecode davon runtergeladen und kompiliert. Danach mit "make install" installiert.

    Dann hab ich das gleiche Programm wie oben nochmal kompiliert und jetzt gibt mir "strings (dateiname_der_binary) | grep GLIB" immer aus:

    GLIBC_2.0
    GLIBC_2.1.3
    GLIBC_2.1
    GLIBCXX_3.4
    

    Nun fehlt die 3.4.11 und auf dem Zielsystem kommt auch kein Fehler mehr.

    Nun meine Frage: woher weiß g++ denn, welche GLIBCXX-Version er mit rein linken soll? Das muss ja irgendwo stehen. Bitte klärt mich auf 🙂



  • Diese version ist abhängig von der verwendeten gcc version :).

    Ich vermute nachdem du gcc 4.2.4 bei dir installiert hast, wurde beim bächsten übersetzen deiner sourcen die version 4.2.4 vom gcc verwendet.



  • Das Problem ist, dass ich für Software wie Eclipse scheinbar die Version 3.4.11 brauch. Wenn ich z. B. Eclipse über apt-get installier (ich verwende Ubuntu), wird gleich die Version 3.4.11 mit installiert und der g++ linkt die dann die rein statt der 3.4.


Anmelden zum Antworten