This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Compilation fails on Debian Wheezy - cannot find gnu/stubs-32.h [multiarch]


I was trying to compile gcc-4.7 snapshots on Debian GNU/Linux wheezy
(testing/unstable) i386, and found problem releated to multiarch.

This is my configure and compile script:

unset LC_ALL
unset LANG

export TEMP=/scratch/baryluk/gcc/tmp
export TMP=/scratch/baryluk/gcc/tmp
export TMPDIR=/scratch/baryluk/gcc/tmp

export CPPFLAGS="-I/usr/include/i386-linux-gnu"

cd /
rm -rf /scratch/baryluk/gcc/obiekty
mkdir /scratch/baryluk/gcc/obiekty || exit 1
cd /scratch/baryluk/gcc/obiekty
/scratch/baryluk/gcc/gcc-4.7-20120211/configure \
	--enable-shared \
	--enable-multiarch \
	--enable-nls \
	--enable-linker-build-id \
	--enable-checking=yes \
	--enable-stage1-checking=all \
	--enable-languages=c,c++,objc,go,fortran,ada,java \
	--with-fpmath=sse \
	--with-build-config=bootstrap-lto \
	--enable-lto \
	--enable-libssp \
	--enable-libada \
	--enable-objc-gc \
	--enable-plugin \
	--enable-gold \
	--with-system-zlib \
	--without-included-gettext \
	--enable-threads=posix \
	--enable-cloog-backend \
	--prefix=/usr/local --program-suffix=-4.7

make bootstrap

And this is a error I got after 10 minutes of compilation

make[4]: Leaving directory `/scratch/baryluk/gcc/obiekty/i686-pc-linux-gnu/libgcc'
DEFINES='' HEADERS='/scratch/baryluk/gcc/gcc-4.7-20120211/libgcc/config/i386/value-unwind.h' \
		/scratch/baryluk/gcc/gcc-4.7-20120211/libgcc/ > tmp-libgcc_tm.h
/bin/bash /scratch/baryluk/gcc/gcc-4.7-20120211/libgcc/../move-if-change tmp-libgcc_tm.h libgcc_tm.h
echo timestamp > libgcc_tm.stamp
/scratch/baryluk/gcc/obiekty/./gcc/xgcc -B/scratch/baryluk/gcc/obiekty/./gcc/ -B/usr/local/i686-pc-linux-gnu/bin/ -B/usr/local/i686-pc-linux-gnu/lib/ -isystem /usr/local/i686-pc-linux-gnu/include -isystem /usr/local/i686-pc-linux-gnu/sys-include    -g -O2 -O2  -g -O2 -DIN_GCC   -W -Wall -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include   -fpic -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector   -fpic -I. -I. -I../.././gcc -I/scratch/baryluk/gcc/gcc-4.7-20120211/libgcc -I/scratch/baryluk/gcc/gcc-4.7-20120211/libgcc/. -I/scratch/baryluk/gcc/gcc-4.7-20120211/libgcc/../gcc -I/scratch/baryluk/gcc/gcc-4.7-20120211/libgcc/../include -I/scratch/baryluk/gcc/gcc-4.7-20120211/libgcc/config/libbid -DENABLE_DECIMAL_BID_FORMAT -DHAVE_CC_TLS  -DUSE_TLS -o _muldi3.o -MT _muldi3.o -MD -MP -MF _muldi3.dep -DL_muldi3 -c /scratch/baryluk/gcc/gcc-4.7-20120211/libgcc/libgcc2.c -fvisibility=hidden -DHIDE_EXPORTS
In file included from /usr/include/features.h:388:0,
                 from /usr/include/stdio.h:28,
                 from /scratch/baryluk/gcc/gcc-4.7-20120211/libgcc/../gcc/tsystem.h:88,
                 from /scratch/baryluk/gcc/gcc-4.7-20120211/libgcc/libgcc2.c:29:
/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory
compilation terminated.
make[3]: *** [_muldi3.o] Error 1
make[3]: Leaving directory `/scratch/baryluk/gcc/obiekty/i686-pc-linux-gnu/libgcc'
make[2]: *** [all-stage1-target-libgcc] Error 2
make[2]: Leaving directory `/scratch/baryluk/gcc/obiekty'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/scratch/baryluk/gcc/obiekty'
make: *** [bootstrap] Error 2
Exit 2

There is a file we are searching in the
/usr/include/i386-linux-gnu/gnu/stubs-32.h but it is not used by

I was trying to use CPPFLAGS, but it doesn't help.

I can create few symlinks, but this is far from nice solution.

I really like Debian's approach for multiarch, because it addressess not
only 32/64-bit split, but many other problems. I understand this however
leads to some problems, just like one I encountered here, but It would
be good to have some way to specify transition to Debian's multiarch.

Precise overview of directories to be used by GCC and other stuff can be
found at

Generally there is no multiarch separation for header files, because
most header files are portable, and works without modification on
bi-arch (32/64), and often even on all platforms (if nacasarry header
files have own conditional compilation mechanisms for portability).

However, few header files needs special treatment. This is full list on
my computer

$ /usr/include/i386-linux-gnu> ls -R

asm  bits  ffi.h  ffitarget.h  fpu_control.h  gnu  jconfig.h  sys

a.out.h		 ioctl.h      mtrr.h		 setup.h	 termios.h
auxvec.h	 ioctls.h     param.h		 shmbuf.h	 types.h
bitsperlong.h	 ipcbuf.h     poll.h		 sigcontext32.h  ucontext.h
boot.h		 ist.h	      posix_types_32.h	 sigcontext.h	 unistd_32.h
bootparam.h	 kvm.h	      posix_types_64.h	 siginfo.h	 unistd_64.h
byteorder.h	 kvm_para.h   posix_types.h	 signal.h	 unistd.h
debugreg.h	 ldt.h	      prctl.h		 socket.h	 vm86.h
e820.h		 mce.h	      processor-flags.h  sockios.h	 vsyscall.h
errno.h		 mman.h       ptrace-abi.h	 statfs.h
fcntl.h		 msgbuf.h     ptrace.h		 stat.h
hw_breakpoint.h  msr.h	      resource.h	 swab.h
hyperv.h	 msr-index.h  sembuf.h		 termbits.h

a.out.h		ioctls.h	 posix2_lim.h	 socket2.h	syslog-path.h
byteswap.h	ioctl-types.h	 posix_opt.h	 socket.h	termios.h
cmathcalls.h	ipc.h		 predefs.h	 stab.def	time.h
confname.h	ipctypes.h	 printf-ldbl.h	 statfs.h	types.h
dirent.h	libc-lock.h	 pthreadtypes.h  stat.h		typesizes.h
dlfcn.h		libio-ldbl.h	 resource.h	 statvfs.h	uio.h
elfclass.h	link.h		 sched.h	 stdio2.h	unistd.h
endian.h	locale.h	 select.h	 stdio.h	ustat.h
environments.h	local_lim.h	 semaphore.h	 stdio-ldbl.h	utmp.h
errno.h		mathcalls.h	 sem.h		 stdio_lim.h	utmpx.h
error.h		mathdef.h	 setjmp2.h	 stdio-lock.h	utsname.h
fcntl2.h	mathinline.h	 setjmp.h	 stdlib.h	waitflags.h
fcntl.h		mman.h		 shm.h		 stdlib-ldbl.h	waitstatus.h
fenv.h		monetary-ldbl.h  sigaction.h	 string2.h	wchar2.h
fenvinline.h	mqueue2.h	 sigcontext.h	 string3.h	wchar.h
huge_valf.h	mqueue.h	 siginfo.h	 string.h	wchar-ldbl.h
huge_val.h	msq.h		 signum.h	 stropts.h	wordsize.h
huge_vall.h	nan.h		 sigset.h	 syscall.h	xopen_lim.h
inf.h		netdb.h		 sigstack.h	 sys_errlist.h	xtitypes.h
in.h		poll.h		 sigthread.h	 syslog.h
initspin.h	posix1_lim.h	 sockaddr.h	 syslog-ldbl.h

libc-version.h	lib-names.h  option-groups.h  stubs-32.h  stubs.h

acct.h	    gmon_out.h	perm.h	       sem.h	    sysctl.h	   uio.h
bitypes.h   inotify.h	personality.h  sendfile.h   sysinfo.h	   ultrasound.h
cdefs.h     ioctl.h	poll.h	       shm.h	    syslog.h	   un.h
debugreg.h  io.h	prctl.h        signalfd.h   sysmacros.h    unistd.h
dir.h	    ipc.h	procfs.h       signal.h     termios.h	   user.h
elf.h	    kdaemon.h	profil.h       socket.h     timeb.h	   ustat.h
epoll.h     kd.h	ptrace.h       socketvar.h  time.h	   utsname.h
errno.h     klog.h	queue.h        soundcard.h  timerfd.h	   vfs.h
eventfd.h   mman.h	quota.h        statfs.h     times.h	   vlimit.h
fanotify.h  mount.h	raw.h	       stat.h	    timex.h	   vm86.h
fcntl.h     msg.h	reboot.h       statvfs.h    ttychars.h	   vt.h
file.h	    mtio.h	reg.h	       stropts.h    ttydefaults.h  vtimes.h
fsuid.h     param.h	resource.h     swap.h	    types.h	   wait.h
gmon.h	    pci.h	select.h       syscall.h    ucontext.h	   xattr.h

In fact, when checking /usr/include/gnu/ directory I found it contains
stubs.h and stubs-64.h, and stubs.h is automatically including proper file

#include <bits/wordsize.h>

#if __WORDSIZE == 32
# include <gnu/stubs-32.h>
#elif __WORDSIZE == 64
# include <gnu/stubs-64.h>
# error "unexpected value for __WORDSIZE macro"

However, for some reason stubs-32.h is not present directly in /usr/include/gnu

For Debian specific part this is a packages responsible for various files

libc6-dev: /usr/include/i386-linux-gnu/gnu/stubs-32.h
libc6-dev: /usr/include/i386-linux-gnu/gnu/stubs.h
libc6-dev-amd64: /usr/include/gnu/stubs.h
libc6-dev-amd64: /usr/include/gnu/stubs-64.h

(Remember: I'm on 32-bit machine, 32-bit kernel, and 32-bit OS)

As I understand libc6-dev-amd64 package will be removed from Debian,
once multiarch specification will be implemnted fully in most of
archive. It will be available just as libc6-dev:amd64, and will install
files into /usr/include/x86_64-linux-gnu/, symetrically to

I found essential support for multiarch in this patch for gcc-4.6

It would be nice to have this working out of the box.


PS. Please keep me in CC, as I'm not subscribed to mailing list.

Witold Baryluk

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]