On Fri, 2007-07-27 at 20:20 +1000, Peter Jeremy wrote: > On 2007-Jul-27 15:13:48 +0530, Sharad Chandra <[EMAIL PROTECTED]> wrote: > >I am trying gcc -m32 on freebsd 6.1 amd64 env, but it does not seems to be > >working. i also installed /usr/port/lang/linux-libgcc/ but did not help > >what i did is=> > >echo "main () {}" > t.c; gcc -m32 t.c > >/usr/bin/ld: skipping > >incompatible > >/usr/local/lib/gcc/x86_64-portbld-freebsd6.1/4.2.0/gcc/x86_64-portbld-freebsd6.1/4.2.0/libgcc.a > > > >when searching for -lgcc > >/usr/bin/ld: cannot find -lgcc > >collect2: ld returned 1 exit status > > > >how can we make this working? > > You are using gcc 4.2 from ports. I suspect this only includes the > 64-bit libraries. gcc in the base system includes both 32-bit and > 64-bit libraries by default but it still suffers the same problem. > > I had a go at fixing the problem in amd64/112215 but this has other > problems and needs more work. Note that non-trivial code will break > because <machine/XXXX.h> points at amd64 headers whilst the -m32 > compiler needs i386 headers in many cases. There's a non-trivial > amount of work needed to actually get cross-building working. I > suggest you look throught the FreeBSD-amd64 archives. >
gcc on amd64 is capable of generating i386 code, but ld on amd64 is incapable of linking i386 code together without serious amounts of work. At work, we use a large number of amd64 boxes as compile farm servers for i386 development, using distcc and a wrapper to invoke gcc correctly on the external boxes. To verify that it works (it compiles to i386 code), do this: $ uname -a; echo "main() { } " > t.c ; gcc -c -m32 -o t.o t.c; file t.o FreeBSD chef.mintel.co.uk 6.1-STABLE FreeBSD 6.1-STABLE #1: Fri Jun 23 12:48:28 BST 2006 [EMAIL PROTECTED]:/usr/obj/usr/src/sys/CHEF amd64 t.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (FreeBSD), not stripped
signature.asc
Description: This is a digitally signed message part