Ich habe unter Ubuntu-Linux ein kleines Testprogramm mit FLTK/Fluid geschrieben, womit ich dynamisches/statisches linken teste. Dynamisch gelinkt ist es 21 kByte, statisch gelinkt 580,7 kByte groß. Statisch dazu gelinkt wird nur die FLTK-Library. Beide Programme funktionieren auf meinem PC gleich (Bild OutWin.png die anderen Bilder zeigen die Dateigrößen). Wenn ich mir in der Konsole mit "file QtTest" dessen Eigenschaften ansehe steht dort beide male "dynamically linked", was mich etwas verunsichert. ---------------- QtTest: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=ab966515cfaa015f744d7423b747e04cff3242fe, for GNU/Linux 3.2.0, with debug_info, not stripped ---------------- Wenn ich in der Konsole mit "ldd QtTest" der statisch gelinkten Version die Liste der dynamisch gelinkten Librarys für das Programm ansehe, finde ich dort kein FLTK. Dies bedeutet zusammen mit der Dateigröße doch, daß FLTK statisch gelinkt ist. In der dynamisch gelinkten Version ist FLTK mit aufgeführt. ---------------- linux-vdso.so.1 (0x00007ffc34b56000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007c6826b15000) libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007c68269d5000) libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007c6826600000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007c68269b5000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007c6826200000) /lib64/ld-linux-x86-64.so.2 (0x00007c6826c8b000) libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007c682698b000) libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007c6826983000) libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007c682697b000) libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007c6826963000) libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007c6826956000) ---------------- Meine Frage: Da ich auf allen meinen Rechnern FLTK installiert habe, wie kann ich sicher sein dass das Programm auf Rechnern ohne installiertes FLTK läuft? Gruß. Tom
Tom A. schrieb: > Wenn ich mir in der Konsole mit "file QtTest" dessen Eigenschaften > ansehe steht dort beide male "dynamically linked", was mich etwas > verunsichert. Du hast ja nur einen Teil statisch dazugelinkt. Da bleibt noch genug uebrig. :) Edith: > wie > kann ich sicher sein dass das Programm auf Rechnern ohne installiertes > FLTK läuft? Sicher ist das nicht. Wenn naemlich das FLTK nicht (mehr) zu den uebrigen Bibliotheken passt.
:
Bearbeitet durch User
Konnte das Problem selbst lösen. Habe eine statisch und eine dynamisch gelinkte Version des Programms erstellt und gespeichert. Danach FLTK deinstalliert und jede Version mal gestartet. Die dynamische Version läuft nicht mehr, die statische Version funktioniert. Da der PC ein normales Ubuntu Entwicklungssystem, ohne Besonderheiten, ist sollte das Programm auf den meisten Linux-PC's laufen. Und falls nicht kann man mit "ldd" nachsehen was fehlt. Jetzt hoffe ich nur, dass ich FLTK wieder installieren kann. Bei www.fltk.org ist heute der Wurm drin und sie sind nicht erreichbar. Tom
Tom A. schrieb: > Konnte das Problem selbst lösen. > > Habe eine statisch und eine dynamisch gelinkte Version des Programms > erstellt und gespeichert. Danach FLTK deinstalliert und jede Version mal > gestartet. Die dynamische Version läuft nicht mehr, die statische > Version funktioniert. Umbenennen haette gereicht. > Da der PC ein normales Ubuntu Entwicklungssystem, ohne Besonderheiten, > ist sollte das Programm auf den meisten Linux-PC's laufen. Und falls > nicht kann man mit "ldd" nachsehen was fehlt. Das ist nur das Prinzip Hoffnung. Oder hast du geprueft welche externen Referenzen noch von FLTK angezogen werden? Die koennen ja durchaus in weiteren dynamisch gelinkten Libs liegen...
Tom A. schrieb: > Jetzt hoffe ich nur, dass ich FLTK wieder installieren kann. Bei > www.fltk.org ist heute der Wurm drin und sie sind nicht erreichbar. Normalerweise installiert man doch Pakete für seine Distribution über den Paketmanager seiner Distribution. Bei Dir also deb Pakete aus Ubuntu. Brauchst Du die aller neueste Version von fltk?
Tom A. schrieb: > Jetzt hoffe ich nur, dass ich FLTK wieder installieren kann. Bei > www.fltk.org ist heute der Wurm drin und sie sind nicht erreichbar. Wenn das Programm nachher möglichst problemlos auf andere Linux-Installationen übertragbar sein soll, wär libfltk-dev / libfltk1.3-dev aus den Paketquellen vmtl. besser. Verhindert Probleme mit: Motopick schrieb: > externen Referenzen noch von FLTK angezogen Und du könntest dynamisch linken, und das dann einfach in ein passendes .deb verpacken, was die Abhängigkeiten reinzieht.
Normalerweise ist das ganz einfach, wenn man alles statisch linken will. Man macht einfach "gcc -s" statt "gcc", fertig. Solange man die Libs mit -lirgendnelib angegeben hat, und nicht mit libirgendnelib.so oder libirgendnelib.a, nimmt es dann jenachdem ob man -s angegeben hat oder nicht die .a oder die .so, und damit geht dann alles out of the box. Dann kann man noch Optimierungen einschalten (-Os -Wl,--gc-sections -ffunction-sections -fdata-sections), dann ist es oft auch gar nicht mehr allzu gross.
Da wurden ja noch einige Tips gegeben, danke euch - werde ich mir ansehen. Da FLTK 1.3.8 nun schon weg war, habe ich die Version 1.4 ausprobiert. Dort ist das Problem genau umgekehrt, es wird immer die statische Bibliothek gelinkt. Da hat so ein einfaches Programm schnell eine Größe von 1MByte. Bin wieder zurück auf 1.3.8. Ist ja nicht für ein Projekt, sondern zum lernen und ausprobieren. Tom
Daniel A. schrieb: > Normalerweise ist das ganz einfach, wenn man alles statisch linken will. > Man macht einfach "gcc -s" statt "gcc", fertig. Maja, nicht ganz. Man muss schon auch von sämtlichen verwendeten Libs eine statische Version installiert haben. Und in manchen Fällen, wie es z.B. oft bei openssl gemacht wird, werden dynamische Bibliotheken auch zur Laufzeit per dlopen() nachgeladen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.