Seite 1 von 1

Statisch kompilieren unter Linux!

Verfasst: 25. Januar 2007 13:22
von darmstadt
ich versuche die ganze Zeit unter linux statisch zu linken. Auf der Trolltech Seite habe ich die Anleitung gefunden:

Kompilieren von qt:

Code: Alles auswählen

cd /usr/local/Trolltech/Qt-4.2.2/
./configure -static -prefix
make sub-src
Kompilieren meiner Anwendung

Code: Alles auswählen

cd /home/anwendung/   
make clean
PATH=/usr/local/Trolltech/Qt-4.2.2/bin/:$PATH 
export PATH (mit echo PATH überprüft!)
qmake -config release
make     
Alles läuft fehlerfrei! :D

mit dem Befehl ldd ./anwendung erhalte ich folgende Meldung:

Code: Alles auswählen

libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002b41f8c9f000)
libQtGui.so.4 => /usr/local/Trolltech/Qt-4.2.2/lib/libQtGui.so.4 (0x00002b41f8ea0000)
libpng.so.3 => /usr/lib64/libpng.so.3 (0x00002b41f96a7000)
libSM.so.6 => /usr/X11R6/lib64/libSM.so.6 (0x00002b41f97e4000)
libICE.so.6 => /usr/X11R6/lib64/libICE.so.6 (0x00002b41f98ee000)
libXi.so.6 => /usr/X11R6/lib64/libXi.so.6 (0x00002b41f9a09000)
libXrender.so.1 => /usr/X11R6/lib64/libXrender.so.1 (0x00002b41f9b12000)
libXrandr.so.2 => /usr/X11R6/lib64/libXrandr.so.2 (0x00002b41f9c1b000)
libXfixes.so.3 => /usr/X11R6/lib64/libXfixes.so.3 (0x00002b41f9d1e000)
libXcursor.so.1 => /usr/X11R6/lib64/libXcursor.so.1 (0x00002b41f9e24000)
libXinerama.so.1 => /usr/X11R6/lib64/libXinerama.so.1 (0x00002b41f9f2e000)
libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00002b41fa030000)
libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x00002b41fa1ac000)
libXext.so.6 => /usr/X11R6/lib64/libXext.so.6 (0x00002b41fa2ef000)
libX11.so.6 => /usr/X11R6/lib64/libX11.so.6 (0x00002b41fa400000)
libQtCore.so.4 => /usr/local/Trolltech/Qt-4.2.2/lib/libQtCore.so.4 (0x00002b41fa60f000)
libz.so.1 => /lib64/libz.so.1 (0x00002b41fa896000)
libglib-2.0.so.0 => /opt/gnome/lib64/libglib-2.0.so.0 (0x00002b41fa9aa000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002b41fab3e000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b41fac42000)
libm.so.6 => /lib64/libm.so.6 (0x00002b41fad58000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b41faeae000)
libc.so.6 => /lib64/libc.so.6 (0x00002b41fafbb000)
/lib64/ld-linux-x86-64.so.2 (0x00002b41f8b82000)
libexpat.so.1 => /usr/lib64/libexpat.so.1 (0x00002b41fb1ec000)
und ich kann natürlich das ganz nicht auf einem anderen Computer zum laufen bringen! :evil:

Weiss jemand weiter?

vielen Dank

Verfasst: 25. Januar 2007 13:47
von Tarek
Naja scheinbar hast du ja die statischen Libs im selben Verzeichnis wie die Dynamischen, das dürfte das Problem sein, denn solange der Linker die Dynamischen findet nimmt er sie auch. Also du musst sie in getrennte Verzeichnisse schaffen und dann dafür sorgen dass der Linker nur noch die statischen Libs findet. Alternativ kannst du auch mit der Option "-static" linken, dann wird aber restlos alles statisch gelinkt, und wenn du von einigen Bibliotheken nur SOs hast dann gibts Probleme...

Verfasst: 25. Januar 2007 15:41
von darmstadt
aha!, sehr hilfreich. Aber wo soll ich den Parameter -static eingeben? in der .pro datei?

Verfasst: 25. Januar 2007 16:47
von darmstadt
ok, es geht! Ich habe in der .pro LIBS += -static hingeschrieben. Nun habe ich noch das problem der compiler dies sagt:

Code: Alles auswählen

...requires at runtime the shared libraries from the glibc...