Problem with compiling using -m32

Kai Ruottu kai.ruottu@wippies.com
Fri Feb 11 06:56:00 GMT 2011


11.2.2011 6:49, Alireza Haghdoost kirjoitti:
> Hello
>
> I am trying to make an application on a 64-bit machine with -m32
> option. I have add "-m32" in CFLAGS and
> "-L/usr/lib/gcc/x86_64-linux-gnu/4.4/32 -m32 -L/usr/lib32" in LDFLAGS.
> However I have got the following error :
>
> /usr/bin/ld: i386:x86-64 architecture of input file
> `/usr/lib/gcc/x86_64-linux-gnu/4.1.3/crtbegin.o' is incompatible with
> i386 output
> /usr/bin/ld: i386:x86-64 architecture of input file
> `/usr/lib/gcc/x86_64-linux-gnu/4.1.3/crtend.o' is incompatible with
> i386 output

These 'crt*' files are the default 64-bit x86_64 objects, the
'/usr/lib/gcc/x86_64-linux-gnu/4.1.3/32' should have the 32-bit
x86 equivalents.
>
> I have 32-bit version of crtbegin.o and crtend.o in
> /usr/lib/gcc/x86_64-linux-gnu/4.4/32/ However gcc try to use 64-bit
> version from /usr/lib/gcc/x86_64-linux-gnu/4.1.3/.

The '-verbose' option for the linker would be nice in a case
like this... One gives it with the '-Wl,<linker-option>', here
'-Wl,-verbose' on the 'cc' command line. In any case it can be
that the '-L' options will only add directories AFTER the normal
ones, not BEFORE them! The GCC manual doesn't tell the order :

-Ldir
   Add directory dir to the list of directories to be searched for ‘-l’.

> Does any one know how I can force gcc to use object files in
> /usr/lib/gcc/x86_64-linux-gnu/4.4/32/ ?

Why the '/usr/lib/gcc/x86_64-linux-gnu/4.1.3/32' doesn't have
the 32-bit 'crtbegin.o' and 'crtend.o' ?  Mixing the 4.4 ones
isn't sane at all!

Maybe you haven't added support for 32-bit linking into your
gcc-4.1.3 toolchain at all via installing the 'glibc-32bit-dev*'
or something packages?



More information about the Gcc-help mailing list