[prev in list] [next in list] [prev in thread] [next in thread] 

List:       suse-programming
Subject:    Suse 9.0 gcc 3.3.1 =?ISO-8859-1?Q?merkw=FCrdiger_Linker-Error?=
From:       adsci <adsci () gmx ! net>
Date:       2005-07-23 9:22:20
Message-ID: 42E20C4C.6050602 () gmx ! net
[Download RAW message or body]

Hallo,

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 
-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'
network_data.o(.text+0x71a): In function `NetworkRecv_Packet':
: undefined reference to `errno'
network_udp.o(.text+0x96d): In function `NetworkSendUDP_Packet':
: undefined reference to `errno'
extmidi.o(.text+0x116): In function `DoPlay':
: undefined reference to `errno'
collect2: ld returned 1 exit status

Das merkwürdige dabei ist allerdings, dass sowohl die Pfade zu den libs 
und zu den Includes absolut korrekt sind, die errno.h inkludiert wird 
und auch sonst anscheinend alles seine Richtigkeit hat.

Gegen die glibc kompiliert und linked das Programm korrekt.

Ein Bekannter von mir kompiliert das Programm mit dem gleichen Makefile, 
nur anderem gcc und Distribution ebenfalls gegen die gleiche dietlibc 
problemlos.

Weitere Infos: ---------------------------------

Distribution: Suse 9.0

--

# gcc -v
Reading specs from /usr/lib/gcc-lib/i586-suse-linux/3.3.1/specs
Configured with: ../configure --enable-threads=posix --prefix=/usr 
--with-local-prefix=/usr/local --infodir=/usr/share/info 
--mandir=/usr/share/man --libdir=/usr/lib 
--enable-languages=c,c++,f77,objc,java,ada --disable-checking 
--enable-libgcj --with-gxx-include-dir=/usr/include/g++ 
--with-slibdir=/lib --with-system-zlib --enable-shared 
--enable-__cxa_atexit i586-suse-linux
Thread model: posix
gcc version 3.3.1 (SuSE Linux)

--

errno.h der dietlibc.

<code>
#ifndef _REENTRANT
extern int errno;
#else
#define errno (*__errno_location())
#endif

extern int *__errno_location(void);
</code>

--

errno Symbol in /opt/diet/.../libc.a

<code>
# nm --defined-only /opt/diet/lib-i386/libc.a | grep errno
errno.o:
00000000 V errno
errno_location.o:
00000000 W __errno_location
h_errno.o:
00000004 C h_errno
herrno_location.o:
00000000 T __h_errno_location
00000000 W h_errno_location
</code>

--

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>

---------------------------------------------------

Hat jemand eine Ahnung woran das liegen könnte?
Sollten mehr Infos notwendig sein stehe ich bereit sie zu beschaffen :-)

Vielen Dank!

Gruß

Marcel Bankmann

Links:
http://sourceforge.net/projects/openttd/
http://www.fefe.de/dietlibc/

-- 
Um die Liste abzubestellen, schicken Sie eine Mail an:
    suse-programming-unsubscribe@suse.com
Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken
Sie eine Mail an: suse-programming-help@suse.com

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic