Hallo, Am Sat, 23 Jul 2005, adsci schrieb:
ich bin gerade dabei einen dedizierten Server von OpenTTD (links dazu unten) aufzusetzen. Ich versuche gerade den Server gegen den glibc-ersatz "dietlibc" kompilieren.
Meine Änderungen dazu im Makefile:
CC_HOST:=gcc CFLAGS_HOST:=-s -O2 -fomit-frame-pointer CFLAGS:=-nostdlib -D_BSD_SOURCE -static -L/opt/diet/lib-i386/start.o ^^ Was soll das? Und dann auch noch in den CFLAGS? -isystem /opt/diet/include -D__dietlibc__ -s -O2 -fomit-frame-pointer -DWITH_REV -DUNIX -DWITH_ZLIB LDFLAGS:=/opt/diet/lib-i386/libc.a -lgcc /opt/diet/lib-i386/libc.a
Dabei klappt auch die komplette Kompilierung. Doch beim Linkervorgang bekomme ich folgenden Fehler:
===> Linking openttd network_data.o(.text+0x317): In function `NetworkSend_Packets': : undefined reference to `errno' [..] linker zeile, die aus dem Makefile springt:
<code> gcc /opt/diet/lib-i386/libc.a -lgcc /opt/diet/lib-i386/libc.a ai.o ... unix.o [<- alle object-dateien des programms) -lz -L/usr/local/lib -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lpng12 -lz -lm -lpng12 -lz -lm -o openttd </code>
Beim statisch linken kommt es auf die Reihenfolge an. Versuch mal die libc.a hinten anzugeben: gcc ai.o ... unix.o [<- alle object-dateien des programms) -lz -L/usr/local/lib -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lpng12 -lz /opt/diet/lib-i386/libm.a -lpng12 -lz -lgcc /opt/diet/lib-i386/libc.a /opt/diet/lib-i386/libm.a -o openttd Auch die libm (-lm) solltest du durch die diet-Version ersetzen. Allerdings sind wohl die anderen libs (libz, libpng usw.) gegen die glibc gelinkt, ob das ganze also geht und ob du nicht dennoch eine Abhaengigkeit zur glibc bekommst... -dnh -- Man tut was man kann. Kann amn aber wirklich immer das was man tut? [Woko° in dag°]