make und linken..



  • hi!
    ich hab vor kde (qt) zu lernen..
    hab aber noch nie so wirklich mit linux programmiert..
    wie funktioniert das genau mit make?
    hab versucht beispielcode durch den gcc zu schicken, aber der sagt ganz oft 'unresolved symbol'.
    ohne linken gehts und ich hab ne .o datei.. mit welchen bibliotheken muss ich die jetzt zusammen
    linken? (soll ne kde anwendung werden)
    überall les' ich nur: 'ja.. da muss man sich ein makefile machen..' und wie geht das?
    findet make von alleine raus, welche bibliotheken gebraucht werden? (falls ja, wie?)
    und falls nicht, wie find ich das raus?



  • Nun du solltest zuerst mal wiessen welche Bibliotheken du benötigst. Wenn du ein einzelnes C File kompilieren und linken willst in der die Qt gebunden sein soll könnte man es erst mal so probieren:

    gcc test.cpp -I/usr/lib/qt3/include -lqt-mt -lpthread
    

    zumeist erkennt man wie auch beim Windows die fehlenenden Bibliotheken an den nichtaufgelösten Symbolen.

    Wenn du es nicht hinbekommst deine Datei mit dem gcc zu linken wird dir make auch nicht helfen. Make ist nur ein Tool um den erstellungsprozess von mehreren Dateien zu opimieren. Am besten du schaust dir erst mal die Anleitung an http://www.gnu.org/manual/make/index.html und sollte es dann noch spezielle Probleme geben ist das Forum hier sicher die richtige Wahl.

    Joe



  • mh..
    hab mir mit qmake ein Makefile machen lassen.. so funktionierts auch..

    aber noch eine andere sache, die auch zu der überschrift passt..
    kann 2 programme (xine-gui und ein ftp-client) nicht installieren:
    'undefined reference to __ctype_b'
    bzw. __ctype_tolower und toupper..

    sind das fehler im Makefile? wenn mir ne bibliothek fehlen würde, müsste doch
    die rede von 'no such file or directory' sein...oder?
    und tolower/toupper hört sich nach ner standard bibliothek an..



  • Original erstellt von LucKsuS:
    **mh..
    hab mir mit qmake ein Makefile machen lassen.. so funktionierts auch..

    aber noch eine andere sache, die auch zu der überschrift passt..
    kann 2 programme (xine-gui und ein ftp-client) nicht installieren:
    'undefined reference to __ctype_b'
    bzw. __ctype_tolower und toupper..

    **

    Da Frag ich lieber erst mal was für einen Kompiler du verwendest dass kann nämlich auch ein bug im gcc sein

    **
    sind das fehler im Makefile? wenn mir ne bibliothek fehlen würde, müsste doch
    die rede von 'no such file or directory' sein...oder?
    und tolower/toupper hört sich nach ner standard bibliothek an..**

    nein normalerweise deuten undefined reference auf fehlende Bibliotheken hin aber bei Linux muss man auch die Standardbiblitheken angeben. Es ist nicht so wie beim VC wo bestimmte Bibliotheken per dafault ausgewählt sind.

    Joe



  • hab den gcc-3.2
    wenn ich ein einfaches hello world programm mit

    #include <stdio.h>
    

    damit kompiliere, gibts keine probleme..
    bug? 😕



  • mh, so langsam nervt das..
    kann die tcsh wegen dem gleichen problem nicht installieren..
    aber die brauch ich um glut zu installieren..

    also.. wo und wie kann ich denn die standardbibliotheken angeben,
    wenn ich mit ./configure, make, make install
    etwas installieren möchte?



  • Ich hab mich gestern nicht mit dem Problem befassen können aber aber so wie das klingt könnte deine libc nicht ganz aktuell sein, hast du den gcc-3.2 später draufgemacht ?



  • hab ein lfs linux und hab, wie es in der anleitung steht,
    den gcc direkt nach glibc (2.2.5) installiert..

    da fällt mir grade ein, dass ich mal versucht hab, eine andere glibc version
    drüber zu installieren.. 🙄
    konnte mein system danach nur retten indem ich die alten /lib und /usr/lib
    von einer sicherungs cd, die vorher zum glück gebrannt hatte, drauf kopiert hab.
    liegt das vielleicht daran?
    kann/sollte ich meine 2.2.5 glibc version nochmal installieren?



  • Tja das klingt doch erst mal nach einem Anhaltspunkt, aller Wahrscheinlichkeit nach sind die Versionen doch nicht ganz kompatibel oder es sind Reste der alten Version übrig geblieben. Also ich würde es noch mal versuchen den gcc und die glibc neu draufzuziehen und dann sehen was er macht. Gerade diese beiden Komponenten sind mit einander so eng verzahnt das es sich dort meist die Katze in den Schwanz beißt.



  • so, hab ich gemacht..
    glibc und gcc neu installiert.. ohne probleme..
    aber das problem besteht nach wie vor... 😞
    und noch ärgerlicher: der gdb ist auch eins von den programmen,
    die sich nicht installieren lassen..



  • So da bin ich erst mal mit meinem Latein am Ende. Du kannst ja mal die Ausgaben von

    ldd /usr/bin/gcc 
    
    objdump  -t /usr/bin/gcc | grep  __ctype_b
    
    objdump  -t /lib/libc.so.6 | grep  __ctype_b
    

    überprüfen bzw. von den anderen Fehlermeldungen. Solte es hier Probleme geben liegts an der glib sonst tja ????

    Joe

    [ Dieser Beitrag wurde am 08.05.2003 um 10:04 Uhr von JoeIntel editiert. ]



  • mh, also objdump -t /lib/libc.so.6 .. zeigt mir jeweils drei einträge für __ctype_b usw..
    beim gcc nicht..
    ist das jetzt gut oder schlecht?

    seitdem ich glibc und gcc neu installiert hab, funktioniert der qt-designer, mit dem
    ich gearbeitet hatte, nicht mehr.. das fenster schliesst sich sofort nachdem es sich
    aufgebaut hat wieder..
    dachte ich mir, installierst du auch qt nochmal.. aber das geht jetzt auch nicht mehr..
    gleiches problem mit __ctype_b.. aber qt hatte ich ganz am anfang schonmal installiert...??
    ohne probleme..

    ich denke, ich werd mir gleich debian installieren..



  • Eigentlich sollte der objdump beim gcc ungefähr so aussehen.

    dhcp198:/home/falk/byzgl # objdump -t /usr/bin/gcc | grep  __ctype_b
    0805b128 g     O .bss   00000004              __ctype_b@@GLIBC_2.0
    

    Ich glaube das Problem liegt beim gcc der ist anscheinend nicht mit der aktuellen glib kompatibel. Damit kannst du natürlich nichts mehr linken und alle vorher gelinkten Dateien gehen natürlich auch nicht weil sie einen anderen Einstiegspunkt erwarten. Mhmm da wird dir wohl nix anders übrigbleiben als die Sache mit der glib und dem gcc noch mal zu probieren vielleicht hast du bei der ersten Installation was übersehen.

    Auf jeden Fall kannst du die zwischenrein installierten Programme vergessen das ist fast sicher.

    Joe


Anmelden zum Antworten