This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
x86-64 multilib problem
- From: Bo Thorsen <bo at sonofthor dot dk>
- To: bugs at x86-64 dot org, gcc at gcc dot gnu dot org
- Date: Thu, 29 Aug 2002 10:22:06 +0200
- Subject: x86-64 multilib problem
I have a problem in mainline that I really don't understand. When I
configure the mainline to be a multilib compiler, I get this when
linking libgcc in 32 bit mode:
./xgcc -B./ -B/usr/local/x86_64-unknown-linux-gnu/bin/ -isystem /usr/local/x86_64-unknown-linux-gnu/include -isystem /usr/local/x86_64-unknown-linux-gnu/sys-include -O2 -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -isystem ./include -fPIC -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -shared -nodefaultlibs -Wl,--soname=libgcc_s.so.1 -Wl,--version-script=libgcc/32/libgcc.map -o 32/libgcc_s.so.1 -m32 libgcc/32/_muldi3.o libgcc/32/_negdi2.o libgcc/32/_lshrdi3.o libgcc/32/_ashldi3.o libgcc/32/_ashrdi3.o libgcc/32/_ffsdi2.o libgcc/32/_clz.o libgcc/32/_cmpdi2.o libgcc/32/_ucmpdi2.o libgcc/32/_floatdidf.o libgcc/32/_floatdisf.o libgcc/32/_fixunsdfsi.o libgcc/32/_fixunssfsi.o libgcc/32/_fixunsdfdi.o libgcc/32/_fixdfdi.o libgcc/32/_fixunssfdi.o libgcc/32/_fixsfdi.o libgcc/32/_fixxfdi.o libgcc/32/_fixunsxfdi.o libgcc/32/_floatdixf.o libgcc/32/_fixunsxfsi.o libgcc/32/_fixtfdi.o libgcc/32/_fixunstfdi.o libgcc/32/_floatditf.o libgcc/32/_clear_cache.o libgcc/32/_trampoline.o libgcc/32/__main.o libgcc/32/_exit.o libgcc/32/_absvsi2.o libgcc/32/_absvdi2.o libgcc/32/_addvsi3.o libgcc/32/_addvdi3.o libgcc/32/_subvsi3.o libgcc/32/_subvdi3.o libgcc/32/_mulvsi3.o libgcc/32/_mulvdi3.o libgcc/32/_negvsi2.o libgcc/32/_negvdi2.o libgcc/32/_ctors.o libgcc/32/_divdi3.o libgcc/32/_moddi3.o libgcc/32/_udivdi3.o libgcc/32/_umoddi3.o libgcc/32/_udiv_w_sdiv.o libgcc/32/_udivmoddi4.o libgcc/32/unwind-dw2.o libgcc/32/unwind-dw2-fde-glibc.o libgcc/32/unwind-sjlj.o -lc && rm -f libgcc_s_32.so && ln -s 32/libgcc_s.so.1 libgcc_s_32.so
/usr/bin/ld: skipping incompatible /lib64/libc.so.6 when searching for /lib64/libc.so.6
/usr/bin/ld: skipping incompatible /lib64/libc.so.6 when searching for /lib64/libc.so.6
/usr/bin/ld: skipping incompatible /lib64/libc.so.6 when searching for /lib64/libc.so.6
/usr/bin/ld: skipping incompatible /lib64/libc.so.6 when searching for /lib64/libc.so.6
/usr/bin/ld: skipping incompatible /lib64/libc.so.6 when searching for /lib64/libc.so.6
/usr/bin/ld: skipping incompatible /lib64/libc.so.6 when searching for /lib64/libc.so.6
/usr/bin/ld: skipping incompatible /lib64/libc.so.6 when searching for /lib64/libc.so.6
/usr/bin/ld: skipping incompatible /lib64/libc.so.6 when searching for /lib64/libc.so.6
/usr/bin/ld: skipping incompatible /lib64/libc.so.6 when searching for /lib64/libc.so.6
/usr/bin/ld: cannot find /lib64/libc.so.6
collect2: ld returned 1 exit status
make[3]: *** [32/libgcc_s_32.so] Error 1
make[3]: Leaving directory `/suse/bo/Work/gcc/build2/gcc'
make[2]: *** [stmp-multilib] Error 2
make[2]: Leaving directory `/suse/bo/Work/gcc/build2/gcc'
make[1]: *** [stage1_build] Error 2
make[1]: Leaving directory `/suse/bo/Work/gcc/build2/gcc'
make: *** [bootstrap] Error 2
gcc was built with "../gcc/configure --enable-languages=c && make bootstrap"
The problem is that it's looking in the wrong place for libc. It should find
libc.so.6 in /lib/, but only tries the 64 bit one in /lib64.
This is the search path:
bo@berlioz ~/Work/gcc/build2> gcc/xgcc -print-search-dirs -m32
install: /usr/local/lib/gcc-lib/x86_64-unknown-linux-gnu/3.3/
programs: =gcc/../lib/gcc-lib/x86_64-unknown-linux-gnu/3.3/:gcc/../lib/gcc-lib/:/usr/local/lib/gcc-lib/x86_64-unknown-linux-gnu/3.3/:/usr/local/lib/gcc-lib/x86_64-unknown-linux-gnu/3.3/:/usr/local/lib/gcc-lib/x86_64-unknown-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/3.3/:/usr/lib/gcc/x86_64-unknown-linux-gnu/:gcc/../lib/gcc-lib/x86_64-unknown-linux-gnu/3.3/../../../../x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu/3.3/:gcc/../lib/gcc-lib/x86_64-unknown-linux-gnu/3.3/../../../../x86_64-unknown-linux-gnu/bin/:/usr/local/lib/../x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu/3.3/:/usr/local/lib/../x86_64-unknown-linux-gnu/bin/
libraries: =gcc/../lib/gcc-lib/x86_64-unknown-linux-gnu/3.3/:gcc/../lib/gcc-lib/:/usr/local/lib/gcc-lib/x86_64-unknown-linux-gnu/3.3/:/usr/lib/gcc/x86_64-unknown-linux-gnu/3.3/:gcc/../lib/gcc-lib/x86_64-unknown-linux-gnu/3.3/../../../../x86_64-unknown-linux-gnu/lib/x86_64-unknown-linux-gnu/3.3/:gcc/../lib/gcc-lib/x86_64-unknown-linux-gnu/3.3/../../../../x86_64-unknown-linux-gnu/lib/:/usr/local/lib/../x86_64-unknown-linux-gnu/lib/x86_64-unknown-linux-gnu/3.3/:/usr/local/lib/../x86_64-unknown-linux-gnu/lib/:gcc/../lib/gcc-lib/x86_64-unknown-linux-gnu/3.3/../../../x86_64-unknown-linux-gnu/3.3/:gcc/../lib/gcc-lib/x86_64-unknown-linux-gnu/3.3/../../../:/usr/libx86_64-unknown-linux-gnu/3.3/:/usr/lib:/usr/local/lib/x86_64-unknown-linux-gnu/3.3/:/usr/local/lib/:/lib/x86_64-unknown-linux-gnu/3.3/:/lib/:/usr/lib/x86_64-unknown-linux-gnu/3.3/:/usr/lib/
This is the part of -dumpspecs that could be interesting:
*link_gcc_c_sequence:
%G %L %G
*endfile:
%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
*link:
%{!static:--eh-frame-hdr} %{!m32:-m elf_x86_64} %{m32:-m elf_i386} %{shared:-shared} %{!shared: %{!static: %{rdynamic:-export-dynamic} %{m32:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} %{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} %{static:-static}}
*lib:
%{shared: -lc} %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} %{profile:-lc_p} %{!profile: -lc}}
*libgcc:
%{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared:%{!shared-libgcc:-lgcc -lgcc_eh}%{shared-libgcc:-lgcc_s%M -lgcc}}%{shared:%{shared-libgcc:-lgcc_s%M}%{!shared-libgcc:-lgcc}}}}
*startfile:
%{!shared: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:%{profile:gcrt1.o%s} %{!profile:crt1.o%s}}}} crti.o%s %{static:crtbeginT.o%s} %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}
*startfile_prefix_spec:
%{m32: /usr/lib /usr/local/lib/ /lib/ /usr/lib/} %{!m32: /usr/local/lib64/ /lib64/ /usr/lib64/}
*link_command:
%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S: %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}} %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}} %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}
I can't see what the problem is here. Any ideas?
Bo.
--
Bo Thorsen | Praestevejen 4
Free software developer | 5290 Marslev
SuSE Labs | Denmark