Programme compilen und Libs statisch linken

realriot

Neuer User
Mitglied seit
23 Nov 2004
Beiträge
158
Punkte für Reaktionen
0
Punkte
16
Moin,

ich nutze Freetz dazu Programme zu bauen um diese im originalen Image zu nutzen. Jetzt hat man natürlich oft die Thematik mit den Libs. Ist es möglich, eine Option anzugeben, dass letztendlich möglichst alle Programme (Packages in menuconfig) statisch gebaut werden?

Ja, die Programme sind größer werden jedoch eh auf einem USB-Stick genutzt...

Danke und viele Grüße
Sascha
 
Der einfachste Versuch:
make <paketxy>-precompiled LDFLAGS="-static"

eventuell vorher make <paketxy>-clean, wenn es schon gebaut ist.

Wenn dann libs fehlen, kann man darum meist die LDFLAGS erweitern, manchmal muss aber dazu schon im configure ein Flag gesetzt sein (--enable-static oder sowas), dann geht es nicht ohne Eingriff ins .mk-file des Paketes.
 
Ich habs gerade mal mit rsync getestet... Funktioniert so ohne weiteres nicht...
Ein --enable-static o.Ä. gibt's im ./configure script nicht.
 
Das ist ein "schlechtes" Beispiel, weil da im Freetz make-File selbst die LDFLAGS gesetzt werden (es gibt für das Paket eine "static" Option im Freetz).
Dort geht:
Code:
make rsync-precompiled FREETZ_PACKAGE_RSYNC_STATIC=y



Dort geht aber auch die "von Hand-Methode", die in "harten Fällen" fast immer funktioniert.
Dafür nutzt man einfach die letzten Zeilen des make-Outputs:

Code:
[...]
flist.c: In function 'recv_file_entry':
flist.c:693:9: warning: variable 'modtime_nsec' set but not used [-Wunused-but-set-variable]
[b]/home/joerg/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.29/mipsel-linux-uclibc/bin/mipsel-linux-uclibc-gcc -std=gnu99 -march=4kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -Wall -W -I./zlib -Wno-unused-parameter  -o rsync flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o util.o util2.o main.o checksum.o match.o syscall.o log.o backup.o delete.o options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o fileio.o batch.o clientname.o chmod.o acls.o xattrs.o progress.o pipe.o params.o loadparm.o clientserver.o access.o connection.o authenticate.o lib/wildmatch.o lib/compat.o lib/snprintf.o lib/mdfour.o lib/md5.o lib/permstring.o lib/pool_alloc.o lib/sysacls.o lib/sysxattrs.o  zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/trees.o zlib/zutil.o zlib/adler32.o zlib/compress.o zlib/crc32.o  -lpopt [/b]
make[1]: [b]Verlasse Verzeichnis '/home/joerg/freetz-trunk/source/target-mipsel_gcc-4.6.4_uClibc-0.9.29/rsync-3.1.0'[/b]
mkdir -p packages/target-mipsel_gcc-4.6.4_uClibc-0.9.29/rsync-3.1.0/root/usr/bin/; cp source/target-mipsel_gcc-4.6.4_uClibc-0.9.29/rsync-3.1.0/rsync packages/target-mipsel_gcc-4.6.4_uClibc-0.9.29/rsync-3.1.0/root/usr/bin/rsync; /home/joerg/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.29/mipsel-linux-uclibc/bin/mipsel-linux-uclibc-strip --remove-section={.comment,.note,.pdr} packages/target-mipsel_gcc-4.6.4_uClibc-0.9.29/rsync-3.1.0/root/usr/bin/rsync;
done.

Die "letzte make" Zeile "verlasse Verzeichnis" zeigt, "wo wir hinmüssen":
Code:
cd /home/joerg/freetz-trunk/source/target-mipsel_gcc-4.6.4_uClibc-0.9.29/rsync-3.1.0
Die davor den letzten Compiler-Aufruf, dem wir einfac ein "-static" anhängen (oder vorne bei den anderen Optionen einfügen):
Code:
/home/joerg/freetz-trunk/toolchain/build/mipsel_gcc-4.6.4_uClibc-0.9.29/mipsel-linux-uclibc/bin/mipsel-linux-uclibc-gcc -std=gnu99 -march=4kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -Wall -W -I./zlib -Wno-unused-parameter  -o rsync flist.o rsync.o generator.o receiver.o cleanup.o sender.o exclude.o util.o util2.o main.o checksum.o match.o syscall.o log.o backup.o delete.o options.o io.o compat.o hlink.o token.o uidlist.o socket.o hashtable.o fileio.o batch.o clientname.o chmod.o acls.o xattrs.o progress.o pipe.o params.o loadparm.o clientserver.o access.o connection.o authenticate.o lib/wildmatch.o lib/compat.o lib/snprintf.o lib/mdfour.o lib/md5.o lib/permstring.o lib/pool_alloc.o lib/sysacls.o lib/sysxattrs.o  zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/trees.o zlib/zutil.o zlib/adler32.o zlib/compress.o zlib/crc32.o  -lpopt [b]-static[/b]
 
Zuletzt bearbeitet:
Ja, die Programme sind größer werden jedoch eh auf einem USB-Stick genutzt...
Nicht nur die Programme sind größer, auch der Bedarf im RAM ist größer, weil die Libraries mehrfach geladen werden statt gemeinsam genutzt zu werden.

Für etliche Programme gibt es in Freetz schon eine Option, Programme statisch zu erstellen. Der einzige Grund, das zu tun, ist um eben diese Programme ohne Freetz zu verwenden. Eine allgemeine Option, alle Programme statisch zu erstellen, gibt es nicht, zumal es vom jeweiligen Programm abhängt, was dafür getan werden muss.
 
Dank! Ihr habt mir weitergeholfen und ich bin nun schlauer was das Thema angeht ;-)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.