Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Statisch gelinktes Programm erstellen

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.03.2006
    Beiträge
    54

    Statisch gelinktes Programm erstellen

    Ich möchte mein Programm statisch linken, also damit es auch auf einem
    Linux läuft dem die benötigten Bibliotheken fehlen.

    Code:
    gcc -o nanogfx -march=athlon -ffast-math -fomit-frame-pointer -O0 -I/usr/include/SDL -I/usr/local/include/SDL main.c socket.c gadgets.c mem.c string.c -Wl,-Bstatic -lSDLmain -lSDL -lSDL_net -lSDL_gfx -lSDL_ttf -lSDL_image
    /usr/bin/ld: cannot find -lgcc_s
    collect2: ld returned 1 exit status
    So wie ich das sehe wird "libgcc_s" dafür benötigt? Wo kann ich die finden?
    "... der Großteil hier hat einfach keine Lust, jede Pore einer Brotscheibe mit Butter auszuschmieren." - Susu

  2. #2
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Du hast sowohl static als auch shared Bibliothek mit eingbunden. Gebe am besten die Kompletten Pfade zu den Statischen Bibliotheken an. -lgcc_s gibt es nur als shared daher auch das _s Diese Bibliothek wird Automatisch vom gcc Compiler eingebunden. Du kannst das aber auch mit der gcc option "-static" oder "-static-libgcc" erzwingen.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  3. #3
    Registrierter Benutzer
    Registriert seit
    20.03.2006
    Beiträge
    54
    Ok, dann geht es. Aber das Programm hat immer noch die gleiche Größe.
    Wenn die SDL Bibliotheken gelinkt würden, dann müßte es doch größer werden.

    Die Sollen ja alle mit dazu gelinkt werden. Was muß ich da machen?
    "... der Großteil hier hat einfach keine Lust, jede Pore einer Brotscheibe mit Butter auszuschmieren." - Susu

  4. #4
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Du stellst dir eher die Frage ob dein Programm jetzt auch wirklich rein statisch ist. ldd aus den glibc Paket gibt aufschluss darüber wie dein Programm übersetzt wurde.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  5. #5
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    05.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von undefined Beitrag anzeigen
    Du hast sowohl static als auch shared Bibliothek mit eingbunden. Gebe am besten die Kompletten Pfade zu den Statischen Bibliotheken an. -lgcc_s gibt es nur als shared daher auch das _s Diese Bibliothek wird Automatisch vom gcc Compiler eingebunden. Du kannst das aber auch mit der gcc option "-static" oder "-static-libgcc" erzwingen.
    So ala: _s steht für shared, das weiß doch jeder. Warum sollte _s für static stehn? *g*
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  6. #6
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Hat hier einer behauptet das es jeder wissen muss?Extra für dich das ist im übrigen schon seit 3.1 der fall. http://www.techfak.uni-bielefeld.de/...olume29/1.html
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  7. #7
    Registrierter Benutzer
    Registriert seit
    20.03.2006
    Beiträge
    54
    Hier ist die Ausgabe von ldd, die Bibliotheken sind nicht im Programm
    eingebunden.

    Code:
     ldd nanogfx
    	linux-gate.so.1 =>  (0xb7f13000)
    	libSDL-1.2.so.0 => /usr/lib/libSDL-1.2.so.0 (0xb7e4b000)
    	libSDL_net-1.2.so.0 => /usr/lib/libSDL_net-1.2.so.0 (0xb7e47000)
    	libSDL_gfx.so.4 => /usr/lib/libSDL_gfx.so.4 (0xb7e34000)
    	libSDL_ttf-2.0.so.0 => /usr/lib/libSDL_ttf-2.0.so.0 (0xb7e2f000)
    	libSDL_image-1.2.so.0 => /usr/lib/libSDL_image-1.2.so.0 (0xb7e14000)
    	libc.so.6 => /lib/libc.so.6 (0xb7cd6000)
    	libasound.so.2 => /usr/lib/libasound.so.2 (0xb7c13000)
    	libm.so.6 => /lib/libm.so.6 (0xb7bed000)
    	libdl.so.2 => /lib/libdl.so.2 (0xb7be9000)
    	libdirectfb-1.0.so.0 => /usr/lib/libdirectfb-1.0.so.0 (0xb7b82000)
    	libfusion-1.0.so.0 => /usr/lib/libfusion-1.0.so.0 (0xb7b7a000)
    	libdirect-1.0.so.0 => /usr/lib/libdirect-1.0.so.0 (0xb7b66000)
    	libvga.so.1 => /usr/lib/libvga.so.1 (0xb7b04000)
    	libpthread.so.0 => /lib/libpthread.so.0 (0xb7aec000)
    	libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb7a77000)
    	libz.so.1 => /usr/lib/libz.so.1 (0xb7a62000)
    	libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb7a3e000)
    	libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0xb7a1e000)
    	libtiff.so.4 => /usr/lib/libtiff.so.4 (0xb79c9000)
    	/lib/ld-linux.so.2 (0xb7f14000)
    	librt.so.1 => /lib/librt.so.1 (0xb79c0000)
    	libx86.so.1 => /lib/libx86.so.1 (0xb79bd000)
    "... der Großteil hier hat einfach keine Lust, jede Pore einer Brotscheibe mit Butter auszuschmieren." - Susu

  8. #8
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Dein Programm wurde nicht statisch übersetzt. Was du siehst sind alles shared Bibliotheken.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  9. #9
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    05.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von undefined Beitrag anzeigen
    Hat hier einer behauptet das es jeder wissen muss?Extra für dich das ist im übrigen schon seit 3.1 der fall. http://www.techfak.uni-bielefeld.de/...olume29/1.html
    War ja net ernst gemeint.
    Ich mein nur, dass die Endung _s es eben nicht schafft die Unterscheidung zwischen shared und static zu machen. Die hätten _sh bzw. _st nehmen sollen.
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •