On Fri, Oct 13, 2000 at 01:30:42PM +0200, Sven Hessler wrote:
Hallo,
ich habe ein Debian 2.2, d.h. auf libc6 basierend. Nun muss ich aber noch Programme uebersetzen, die die libc5 benoetigen. Ich habe mir die development-Pakete installiert, d.h. libc5 und lib5-altdev
Wenn ich ein Testprogramm gegen libc5 linken will, dann bekomme ich folgende Fehlermeldung:
gcc -o try -g -Wall -DLINUX try.o -L/usr/i486-linuxlibc1/lib -L/usr/lib/libc5-compat -lm /usr/lib/crt1.o: In function `_start': /usr/lib/crt1.o(.text+0x1d): undefined reference to `__libc_start_main' collect2: ld returned 1 exit status make: *** [try] Error 1
Dieser Fehler tritt auf, weil in /usr/lib/ natuerlich die crt1.o der libc6 liegt und die libc5 Variante in /usr/i486-linuxlibc1/lib
Wie kann ich dem Compiler/Linker sagen, dass er doch bitte schoen die libc5 Variante der crt1.o verwenden soll? Die explizite Angabe a la:
gcc -o try -g -Wall -DLINUX try.o /usr/i486-linuxlibc1/lib/crt1.o -L/usr/i486-linuxlibc1/lib -L/usr/lib/libc5-compat -lm
Lies mal http://www.linux.org/docs/ldp/howto/Glibc2-HOWTO-6.html Wichig ist das -b um das richtige Backend des Compilers zu aktivieren. Uebrigens bringt "-L/usr/i486-linuxlibc1/lib" nicht das, was du erwartest. Der Pfad hinter -L wird *hinten* an die Liste zu durchsuchender Verzeichnisse drangehaengt. Die Standardpfade werden schon vorher abgegrast. Die crt1.o kannst du auch nicht einfach nochmal dem gcc vorwerfen, da er dann beide linken will.
Der gcc-Teil fuer die libs5 ist bei Debian im Paket "altgcc":
altgcc - Alternate gcc package for the libc5 environment.
This special gcc package works with the libc5-altdev package to build binaries for the old libc5/ld-linux.so.1 environment. It can coexist with the standard libc6 development packages.
Reinhard