Boost-Asio und GLIBC not found



  • Hallo,

    ich habe mal anfgefangen, unter Ubuntu Boost zu nutzen. Ich habe mit Boost-Asio einen kleinen UDP-Server geschrieben, der an einem Port auf Nachrichten lauscht. Die Software lasse ich nun auf einem Zielsystem laufen und bekomme folgenden Fehler, obwohl ich die nötige Lib auf dem Zielsystem seperat gebaut habe:

    ./server: /lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.8' not found (required by ./server)
    ./server: /lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.9' not found (required by ./server)
    

    Wie kann es sein, dass irgendetwas an der Anwendung immer noch gegen eine andere GLIBC gelinkt ist, wenn die einzige Lib, die ich zusätzlich benötige, auf dem Zielsystem erstellt wurde?

    Beispiel:

    #include <iostream>
    int main() { std::cout << "Hello World\n"; return 0; }
    

    klappt, wenn es im Entwicklungssystem gebaut wird, aber auf dem Zielsystem ausgeführt wird.

    #include <boost/asio/ip/udp.hpp>
    #include <iostream>
    int main() { //Serverapp }
    

    klappt nicht mit der oberen Vorgehensweise. Es wird nur zusätzlich libboost_system.so.1.52.0 benötigt. Wenn ich die ganze Anwendung auf dem Zielsystem neu baue, dann geht's. 😕

    Warum geht's nicht ohne die App neu zu bauen?

    Entwicklungssystem: Ubuntu 10 mit GLIBC 2.11
    Zielsystem: Ubuntu 8 mit GLIBC 2.7

    Grüße,
    anjohn


  • Mod

    Die Fehlermeldung ist doch recht eindeutig, oder? Daher nehme ich mal an, dass deine Behauptung

    obwohl ich die nötige Lib auf dem Zielsystem seperat gebaut habe

    für

    libboost_system.so.1.52.0

    entweder falsch ist oder der Build nicht korrekt durchgeführt wurde. Was ergibt denn

    ldd -v deine_anwendung
    

    ? Ausgabe bitte vom Zielsystem (Die Ausgabe vom Buildsystem kannst du auch zeigen, wenn du möchtest). Erstell dazu am besten ein Minimalbeispiel, welches einfach nur libboost_system benutzt und sonst nichts, damit es übersichtlich bleibt (kontrollier auch, ob der Fehler beim Minimalbeispiel auch tatsächlich noch besteht!)

    Gegenmaßnahmen (allgemeiner Art) wären:
    1. Bauen der Software auf dem Zielsystem. Sollte klar sein. Nicht umsonst wird Software üblicherweise so verteilt. So passt immer alles.
    2. Bauen der Software für das Zielsystem. Du legst dir irgendwo einen Installationsordner mit alten Bibliotheksversionen an. Dann baust du die Software mit diesen Bibliotheken. Je nach Compiler kann man denen andere Bibliotheksordner, selbst für glibc, unterschieben. Beim GCC zum Beispiel mit sysroot, siehe hier für eine ausführliche Beschreibung und Alternativen). Schlimmstenfalls mit chroot , wenn du nicht weißt, wie es für deinen Compiler geht.



  • Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Viele Dank!

    Also das Minimalbeispiel wäre:

    #include <boost/asio/ip/udp.hpp>
    
    using boost::asio::ip::udp;
    
    int main(int argc, char* argv[]) {
    
      // Krims-Krams anlegen
      boost::asio::io_service io_service;
      udp::socket socket(io_service, udp::endpoint(udp::v4(), 12345));
    
      while(true)
      {
        // Noch mehr Krims-Krams anlegen
        boost::array<char, 128> recv_buf;
        udp::endpoint remote_endpoint;
        boost::system::error_code ignored_error;
    
        // Auf Nachrichten lauschen
        socket.receive_from(boost::asio::buffer(recv_buf), remote_endpoint, 0, ignored_error);
      }
    
        return 0;
    }
    

    Ich habe es auf dem Entwicklungssystem kompiliert und auf dem Zielsystem funktioniert es nicht. Ich habe die Libs frisch auf dem Zielsystem gebaut, wie hier beschrieben:
    http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/using.html
    Wenn man Boost entpackt, existiert der "Stage"-Ordner noch nicht, in dem die Libs standardmäßig gebaut werden. Die können eigentlich nicht einfach schon da sein, oder so. ^^

    Die Ausgabe von ldd -v auf dem Zielsystem ergibt

    ./simpleServer: /lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.8' not found (required by ./simpleServer)
    ./simpleServer: /lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.9' not found (required by ./simpleServer)
    	linux-gate.so.1 =>  (0xb777c000)
    	libboost_system.so.1.52.0 => /home/opentcs/Desktop/boost_1_52_0/stage/lib/libboost_system.so.1.52.0 (0xb7776000)
    	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7676000)
    	libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7650000)
    	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7645000)
    	libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb74f6000)
    	libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb74de000)
    	librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb74d5000)
    	/lib/ld-linux.so.2 (0xb777d000)
    
    	Version information:
    	./simpleServer:
    		libpthread.so.0 (GLIBC_2.0) => /lib/tls/i686/cmov/libpthread.so.0
    		libgcc_s.so.1 (GCC_3.0) => /lib/libgcc_s.so.1
    		libstdc++.so.6 (CXXABI_1.3) => /usr/lib/libstdc++.so.6
    		libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib/libstdc++.so.6
    		libc.so.6 (GLIBC_2.8) => not found
    		libc.so.6 (GLIBC_2.4) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.9) => not found
    		libc.so.6 (GLIBC_2.7) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.3.2) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    	/home/opentcs/Desktop/boost_1_52_0/stage/lib/libboost_system.so.1.52.0:
    		libpthread.so.0 (GLIBC_2.0) => /lib/tls/i686/cmov/libpthread.so.0
    		libgcc_s.so.1 (GCC_3.0) => /lib/libgcc_s.so.1
    		libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib/libstdc++.so.6
    		libstdc++.so.6 (CXXABI_1.3) => /usr/lib/libstdc++.so.6
    		libc.so.6 (GLIBC_2.4) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    	/usr/lib/libstdc++.so.6:
    		ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
    		libgcc_s.so.1 (GCC_4.2.0) => /lib/libgcc_s.so.1
    		libgcc_s.so.1 (GLIBC_2.0) => /lib/libgcc_s.so.1
    		libgcc_s.so.1 (GCC_3.3) => /lib/libgcc_s.so.1
    		libgcc_s.so.1 (GCC_3.0) => /lib/libgcc_s.so.1
    		libc.so.6 (GLIBC_2.4) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.1) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.2) => /lib/tls/i686/cmov/libc.so.6
    	/lib/tls/i686/cmov/libm.so.6:
    		ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    	/lib/libgcc_s.so.1:
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.2.4) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    	/lib/tls/i686/cmov/libc.so.6:
    		ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
    		ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
    		ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
    	/lib/tls/i686/cmov/libpthread.so.0:
    		ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
    		ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
    		ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.1) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.3.2) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.2) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_PRIVATE) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    	/lib/tls/i686/cmov/librt.so.1:
    		ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
    		libpthread.so.0 (GLIBC_2.1) => /lib/tls/i686/cmov/libpthread.so.0
    		libpthread.so.0 (GLIBC_2.2) => /lib/tls/i686/cmov/libpthread.so.0
    		libpthread.so.0 (GLIBC_PRIVATE) => /lib/tls/i686/cmov/libpthread.so.0
    		libpthread.so.0 (GLIBC_2.0) => /lib/tls/i686/cmov/libpthread.so.0
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.3.2) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.1) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.2) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_PRIVATE) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    

    Und auf dem Entwicklungssystem:

    robokeeper@pris:~/src/Boost-Asio-Tutorial$ ldd -v simpleServer
    	linux-gate.so.1 =>  (0x00df2000)
    	libboost_system.so.1.52.0 => /home/robokeeper/boost/stage/lib/libboost_system.so.1.52.0 (0x003ec000)
    	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00110000)
    	libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x009af000)
    	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0055a000)
    	libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00205000)
    	libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x005df000)
    	librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0x00b0e000)
    	/lib/ld-linux.so.2 (0x00527000)
    
    	Version information:
    	./simpleServer:
    		libpthread.so.0 (GLIBC_2.0) => /lib/tls/i686/cmov/libpthread.so.0
    		libgcc_s.so.1 (GCC_3.0) => /lib/libgcc_s.so.1
    		libstdc++.so.6 (CXXABI_1.3) => /usr/lib/libstdc++.so.6
    		libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib/libstdc++.so.6
    		libc.so.6 (GLIBC_2.8) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.4) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.9) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.7) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.3.2) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    	/home/robokeeper/boost/stage/lib/libboost_system.so.1.52.0:
    		libgcc_s.so.1 (GCC_3.0) => /lib/libgcc_s.so.1
    		libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib/libstdc++.so.6
    		libstdc++.so.6 (CXXABI_1.3) => /usr/lib/libstdc++.so.6
    		libc.so.6 (GLIBC_2.4) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    	/usr/lib/libstdc++.so.6:
    		libm.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libm.so.6
    		ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
    		libgcc_s.so.1 (GCC_4.2.0) => /lib/libgcc_s.so.1
    		libgcc_s.so.1 (GLIBC_2.0) => /lib/libgcc_s.so.1
    		libgcc_s.so.1 (GCC_3.3) => /lib/libgcc_s.so.1
    		libgcc_s.so.1 (GCC_3.0) => /lib/libgcc_s.so.1
    		libc.so.6 (GLIBC_2.4) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.1) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.3.4) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.3.2) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.2) => /lib/tls/i686/cmov/libc.so.6
    	/lib/tls/i686/cmov/libm.so.6:
    		ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    	/lib/libgcc_s.so.1:
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.2.4) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    	/lib/tls/i686/cmov/libc.so.6:
    		ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
    		ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
    		ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
    	/lib/tls/i686/cmov/libpthread.so.0:
    		ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
    		ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
    		ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.1) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.3.2) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.2) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_PRIVATE) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    	/lib/tls/i686/cmov/librt.so.1:
    		libpthread.so.0 (GLIBC_2.1) => /lib/tls/i686/cmov/libpthread.so.0
    		libpthread.so.0 (GLIBC_2.2) => /lib/tls/i686/cmov/libpthread.so.0
    		libpthread.so.0 (GLIBC_PRIVATE) => /lib/tls/i686/cmov/libpthread.so.0
    		libpthread.so.0 (GLIBC_2.0) => /lib/tls/i686/cmov/libpthread.so.0
    		libc.so.6 (GLIBC_2.1.3) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.3.2) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.1) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.2) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_PRIVATE) => /lib/tls/i686/cmov/libc.so.6
    		libc.so.6 (GLIBC_2.0) => /lib/tls/i686/cmov/libc.so.6
    

Anmelden zum Antworten