OS: Debian 3.1 AMD64 Sarge
CPU: Sempron 64
Kernel: 2.6.14.2 (keine patchs)
Compiler: gcc (GCC) 3.3.5 (Debian 1:3.3.5-13)
Binutils: v2.14
Umgebung:
CROSSDIRECTORY=/opt/crosscomp
configure und make werden entsprechend mit 'PATH=$PATH:$CROSSDIRECTORY/bin ' als prefix gestartet und mit --prefix=$CROSSDIRECTORY
Symlinks (sonst findet er gar nix):
/opt/crosscomp/i686-pc-linux-gnu/lib -> /emul/ia32-linux/usr/lib
/opt/crosscomp/lib -> /emul/ia32-linux/lib
Geschichte:
Da mir nun schon einige Anwendungen unter die Nase gekommen sind, die einfach 32bit compiliert werden müssen (zB. Cedega), wollte ich mein Compiler mal auf Crosscompiling aufmotzen. Ein komplettes chroot erscheint mir doch "leicht" übertrieben, da eine 32bit Anwendung mit entsprechenden Bibliotheken in /emul/ia32-linux auch so laufen sollte.
Also erstmal schlau gemacht was ich brauche und binutils und gcc sourcen gezogen. Nach einigem hin und her mit GCC habe ich es dann tatsächlich geschafft immerhin das compilieren und linken von GCC selbst hinter mir zu bringen, aber ganz fertig wird er leider doch nicht.
Configure Zeile:
PATH=$PATH:$CROSSDIRECTORY/bin /usr/src/gcc-4.0.2/configure --prefix=$CROSSDIRECTORY --target=i686-pc-linux-gnu --enable-languages=c --disable-threads --disable-dynamic
Kommentar zu Configure:
das mit den disable-dynamic hatte ich probiert in der Hoffnung, dass er sich was anderes wie libc.so suchen würde . Aber glaube er hatte eh schon dynamic als nicht unterstützt erwähnt beim Hauptconfigure. Wenn ich threads nicht deaktiviere scheitert er beim Linken von gcc, weil ihm 2 header files (pthread.h und unistd.h) fehlten. C++ compilieren hatte auch Probleme gemacht, darum hab ich das erstmal ausgeschaltet, kann man ja später immer noch compileren .
Fehlermeldungungen:
Code: Alles auswählen
make[1]: Verlasse Verzeichnis »/tmp/gcc-build/gcc«
Checking multilib configuration...
multilib.out is unchanged
Configuring in i686-pc-linux-gnu/libmudflap
configure: loading cache ./config.cache
checking build system type... x86_64-unknown-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking for i686-pc-linux-gnu-strip... i686-pc-linux-gnu-strip
checking for --enable-version-specific-runtime-libs... no
checking whether to enable maintainer-specific portions of Makefiles... no
checking for i686-pc-linux-gnu-gcc... /tmp/gcc-build/gcc/xgcc -B/tmp/gcc-build/gcc/ -B/opt/crosscomp/i686-pc-linux-gnu/bin/ -B/opt/crosscomp/i686-pc-linux-gnu/lib/ -isystem /opt/crosscomp/i686-pc-linux-gnu/include -isystem /opt/crosscomp/i686-pc-linux-gnu/sys-include
checking for C compiler default output file name... configure: error: C compiler cannot create executables
See `config.log' for more details.
make: *** [configure-target-libmudflap] Fehler 1
Code: Alles auswählen
configure:2293: /tmp/gcc-build/gcc/xgcc -B/tmp/gcc-build/gcc/ -B/opt/crosscomp/i686-pc-linux-gnu/bin/ -B/opt/crosscomp/i686-pc-linux-gnu/lib/ -isystem /opt/crosscomp/i686-pc-linux-gnu/include -isystem /opt/crosscomp/i686-pc-linux-gnu/sys-include -O2 -g -O2 conftest.c >&5
/opt/crosscomp/i686-pc-linux-gnu/bin/ld: warning: ld-linux.so.2, needed by /emul/ia32-linux/lib/libc.so.6, not found (try using -rpath or -rpath-link)
/emul/ia32-linux/lib/libc.so.6: undefined reference to `_dl_lookup_versioned_symbol_skip@GLIBC_PRIVATE'
...
collect2: ld returned 1 exit status
configure:2296: $? = 1
configure: failed program was:
| /* confdefs.h. */
...
configure:2335: error: C compiler cannot create executables
See `config.log' for more details.
Frage:locate ld-linux.so.2 hat geschrieben:/emul/ia32-linux/lib/ld-linux.so.2
/emul/ia32-linux/lib/tls/ld-linux.so.2
/lib/ld-linux.so.2
wie ich bekommen Compiler der könne machen 32Bit Code? (und sagt nu bitte nicht mit chroot, das versuche ich gerade zu vermeiden...)