glibc versionen



  • rüdiger schrieb:

    Link einfach statisch (-static-Flag beim GCC)

    hab probiert... bekomme aber linker fehler:

    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigParseAndLoad':
    (.text+0x1bd5): undefined reference to `XML_SetUserData'
    

    mehrere undefinierte referenzen folgen...

    denke hier wird die libexpat benötigt.. aber wenn ich sie mit der option -lexpat hinzufüge bleiben die fehler..

    weden vlt noch andere libs benötigt? wenn ja wie finde ich raus welche?

    danke..
    gruß
    thomas



  • Du brauchst natürlich eine statische Version von libexpat, um sie statisch in Dein Programm einlinken zu können. Die Datei dürfte dann in Richtung "libexpat.a" anstelle von "libexpat.so" heißen. Bei Bedarf nachinstallieren.



  • Die libexpat.a liegt in /usr/lib...

    war schon installiert..

    wieso linkt der die nicht mit ein? 😕

    expat ist nur von der pthread abhängig.. die habe ich auch noch davor eingefügt.. hat aber auch nix gebracht... 😞

    gruß
    Thomas



  • Kannst Du mal den kompletten GCC-Aufruf und die Ausgabe des Linkprozesses posten?
    Die Compilermeldungen vor dem Linken sind nicht so wichtig.



  • hast du das -static _vor_ die -l-Flags gesetzt? Im Zweifelsfall ersetz das -lexpat durch den kompletten Pfad zu libexpat.a (ohne -l davor)



  • hier die linker ausgaben:

    g++ -Wl,-rpath,/opt/qt4/lib -o ../bin/vcodisp configdata.o main.o configfileparser.o logging.o scaledata.o commbogus.o commnamedpipe.o
     commserialport.o commthread.o dlgrecord.o iteminfoblock.o iteminfoline.o itemlogo.o itemprice.o itemtext.o itemweight.o errorwindow.o infowindow.o
     scalewindow.o windowmetric.o startup.o weighingwindow.o vcodisp.o commfactory.o configfilewriter.o vcostate.o vcostateincomp.o vcostatenotopen.o
     vcostates42.o vcostates55.o vcostatetimeout.o displaysystemconsole.o displaysystemds.o displaysystemwindow.o errorhandler.o outputhelperds.o 
    fifo.o moc_configdata.o moc_scaledata.o moc_commthread.o moc_errorwindow.o moc_infowindow.o moc_scalewindow.o moc_startup.o moc_weighingwindow.o 
    moc_vcodisp.o moc_displaysystembase.o moc_displaysystemconsole.o moc_displaysystemds.o moc_displaysystemwindow.o moc_errorhandler.o qrc_vcodisp.o    
    -L/opt/qt4/lib -static /usr/lib/libexpat.a -lQtXml -L/home/tschuster/qt-x11-commercial-src-4.2.2/lib -lQtGui -L/usr/X11R6/lib 
    -lpng -lXrender -lXrandr -lXfixes -lXcursor -lXinerama -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -ldl -lpthread
    
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libX11.a(CrGlCur.o): In function `open_library':
    /build/buildd/libx11-1.1.1/obj-i486-linux-gnu/src/../../src/CrGlCur.c:72: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    /opt/qt4/lib/libQtCore.a(qfsfileengine_unix.o): In function `QFSFileEngine::owner(QAbstractFileEngine::FileOwner) const':
    qfsfileengine_unix.cpp:(.text+0xa88): warning: Using 'getgrgid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libX11.a(GetDflt.o): In function `GetHomeDir':
    /build/buildd/libx11-1.1.1/obj-i486-linux-gnu/src/../../src/GetDflt.c:133: warning: Using 'getpwnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    /build/buildd/libx11-1.1.1/obj-i486-linux-gnu/src/../../src/GetDflt.c:135: warning: Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libX11.a(x11_trans.o): In function `_X11TransSocketOpen':
    /usr/include/X11/Xtrans/Xtranssock.c:472: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libX11.a(x11_trans.o): In function `UnixHostReallyLocal':
    /usr/include/X11/Xtrans/Xtranssock.c:1893: warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libX11.a(x11_trans.o): In function `_X11TransSocketINETConnect':
    /usr/include/X11/Xtrans/Xtranssock.c:1678: warning: Using 'getservbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcfreetype.o): In function `FcFreeTypeQueryFace':
    (.text+0x21a7): undefined reference to `FT_Get_BDF_Property'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcfreetype.o): In function `FcFreeTypeQueryFace':
    (.text+0x21dc): undefined reference to `FT_Get_BDF_Property'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcfreetype.o): In function `FcFreeTypeQueryFace':
    (.text+0x25ba): undefined reference to `FT_Get_BDF_Property'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcfreetype.o): In function `FcFreeTypeQueryFace':
    (.text+0x25e0): undefined reference to `FT_Get_BDF_Property'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcfreetype.o): In function `FcFreeTypeQueryFace':
    (.text+0x274c): undefined reference to `FT_Get_BDF_Property'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcfreetype.o): In function `FcFreeTypeQueryFace':
    (.text+0x282f): undefined reference to `FT_Get_X11_Font_Format'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcfreetype.o): In function `FcFreeTypeQueryFace':
    (.text+0x28b0): undefined reference to `FT_Get_BDF_Property'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcfreetype.o): In function `FcFreeTypeQueryFace':
    (.text+0x2905): undefined reference to `FT_Get_BDF_Property'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcfreetype.o): In function `FcFreeTypeQueryFace':
    (.text+0x292e): undefined reference to `FT_Get_BDF_Property'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcfreetype.o): In function `FcFreeTypeQueryFace':
    (.text+0x2990): undefined reference to `FT_Get_BDF_Property'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigMessage':
    (.text+0x24a): undefined reference to `XML_GetCurrentLineNumber'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigMessage':
    (.text+0x2d7): undefined reference to `XML_GetCurrentLineNumber'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigParseAndLoad':
    (.text+0x1b90): undefined reference to `XML_ParserCreate'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigParseAndLoad':
    (.text+0x1bd5): undefined reference to `XML_SetUserData'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigParseAndLoad':
    (.text+0x1bed): undefined reference to `XML_SetDoctypeDeclHandler'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigParseAndLoad':
    (.text+0x1c05): undefined reference to `XML_SetElementHandler'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigParseAndLoad':
    (.text+0x1c15): undefined reference to `XML_SetCharacterDataHandler'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigParseAndLoad':
    (.text+0x1c2c): undefined reference to `XML_GetBuffer'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigParseAndLoad':
    (.text+0x1c6c): undefined reference to `XML_ParseBuffer'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigParseAndLoad':
    (.text+0x1c94): undefined reference to `XML_ParserFree'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigParseAndLoad':
    (.text+0x1f74): undefined reference to `XML_GetErrorCode'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libfontconfig.a(fcxml.o): In function `FcConfigParseAndLoad':
    (.text+0x1f7c): undefined reference to `XML_ErrorString'
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libX11.a(ConnDis.o): In function `GetAuthorization':
    /build/buildd/libx11-1.1.1/obj-i486-linux-gnu/src/../../src/ConnDis.c:1253: undefined reference to `XauDisposeAuth'
    /build/buildd/libx11-1.1.1/obj-i486-linux-gnu/src/../../src/ConnDis.c:1058: undefined reference to `XauGetBestAuthByAddr'
    /build/buildd/libx11-1.1.1/obj-i486-linux-gnu/src/../../src/ConnDis.c:1197: undefined reference to `XdmcpWrap'
    collect2: ld gab 1 als Ende-Status zurück
    make: *** [../bin/vcodisp] Fehler 1
    


  • dann wird es nicht gehen: /build/buildd/libx11-1.1.1/obj-i486-linux-gnu/src/../../src/CrGlCur.c:72: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking etc.

    Bleibt dir wohl nur die glibc2.3 zu installieren



  • Die jetzt fehlenden Symbole scheinen von freetype zu kommen. Einfach das fehlende Symbol in Google eingeben, meistens findet man die zuständige lib sehr schnell, wenn das Namensschema es nicht schon verrät...
    Du hast aber ein anderes Problem. Gehe ich richtig in der Annahme, daß Du gcc Version 4.1.2 benutzt? Ist diese Version auch auf Deinem Zielsystem vorhanden?
    C++-Programme haben nämlich die Eigenart immer eine passende libstdc++ zu brauchen. Diese ist von der zur Kompilierung genutzten GCC-Version abhängig. Wenn Du auf Deinem Zielsystem keine libstdc++ vom GCC 4 hast, bzw. sogar 4.1, dann bringt Dich es auch nicht weiter, wegen der anderen glibc-Version statisch zu linken, da die libstdc++ meines Wissens nach nämlich __nie__ mit statisch eingelingt wird. Frag' mich jetzt bitte nicht warum daß so ist, aber ich mußte das selbst schon mal feststellen.
    Da Du ja auch (oder eine von Dir verwendete Library) dlopen benutzt, was zu weiteren Problemen führen kann, wäre es einen Versuch wert, wenn Du sämtliche Libraries, die Dein Programm benötigt, einfach mitlieferst und in ein Verzeichnis unterhalb Deines Programmverzeichnisses legst, z. B. so:
    /opt/meinprogramm/lib/ <--- Hier alle Libs hin
    /opt/meinprogramm/bin/ <--- Hier die Executable hin
    Der Start des Programms würde dann mit einem Wrapper-Skript gemacht werden,
    daß den LD_LIBRARY_PATH auf /opt/meinprogramm/lib setzt und dann Deine Executable mit vollem Pfad (/opt/meinprogramm/bin/myexec) aufruft.

    Um festzustellen, welche Libraries Dein Programm braucht, kannst Du ldd verwenden:
    ldd meinprog liefert eine Liste mit allen benötigten Libraries.



  • rüdiger schrieb:

    dann wird es nicht gehen: /build/buildd/libx11-1.1.1/obj-i486-linux-gnu/src/../../src/CrGlCur.c:72: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking etc.

    Bleibt dir wohl nur die glibc2.3 zu installieren

    hab irgendwo (leider find ich den link nicht mehr) gelesen dass dies ein bug der glib sei und die warnungen ignoriert werden können.. weiß natürlich nicht ob das stimmt...

    tatsächlich habe ich ein anderes teilprojekt auch statisch mit denselben warnungen gelink und das läuft problemlos... !?!



  • Dr. Tux schrieb:

    Die jetzt fehlenden Symbole scheinen von freetype zu kommen. Einfach das fehlende Symbol in Google eingeben, meistens findet man die zuständige lib sehr schnell, wenn das Namensschema es nicht schon verrät...

    die XML* Fehler kommen wohl von expat und, wie gesagt, selbst wenn ich die einlinke bleiben sie..

    Dr. Tux schrieb:

    Du hast aber ein anderes Problem. Gehe ich richtig in der Annahme, daß Du gcc Version 4.1.2 benutzt? Ist diese Version auch auf Deinem Zielsystem vorhanden?
    C++-Programme haben nämlich die Eigenart immer eine passende libstdc++ zu brauchen. Diese ist von der zur Kompilierung genutzten GCC-Version abhängig. Wenn Du auf Deinem Zielsystem keine libstdc++ vom GCC 4 hast, bzw. sogar 4.1, dann bringt Dich es auch nicht weiter, wegen der anderen glibc-Version statisch zu linken, da die libstdc++ meines Wissens nach nämlich __nie__ mit statisch eingelingt wird. Frag' mich jetzt bitte nicht warum daß so ist, aber ich mußte das selbst schon mal feststellen.
    Da Du ja auch (oder eine von Dir verwendete Library) dlopen benutzt, was zu weiteren Problemen führen kann, wäre es einen Versuch wert, wenn Du sämtliche Libraries, die Dein Programm benötigt, einfach mitlieferst und in ein Verzeichnis unterhalb Deines Programmverzeichnisses legst, z. B. so:
    /opt/meinprogramm/lib/ <--- Hier alle Libs hin
    /opt/meinprogramm/bin/ <--- Hier die Executable hin
    Der Start des Programms würde dann mit einem Wrapper-Skript gemacht werden,
    daß den LD_LIBRARY_PATH auf /opt/meinprogramm/lib setzt und dann Deine Executable mit vollem Pfad (/opt/meinprogramm/bin/myexec) aufruft.

    Um festzustellen, welche Libraries Dein Programm braucht, kannst Du ldd verwenden:
    ldd meinprog liefert eine Liste mit allen benötigten Libraries.

    Danke für den Tip!
    Auf dem Zielsystem ist der gcc 4.0.2. Werde jetzt mal versuchen die glibc 2.3 parallel auf meinem System zu installieren und dann dagegen zu lineken. Soll ja funktionieren (http://www.tldp.org/HOWTO/Glibc2-HOWTO.html).
    Wenn das auch nicht klappt werde ich es so probieren wie Du vorgeschlagen hast.

    Nochmals Danke...

    Gruß
    Thomas


Anmelden zum Antworten