[uClibc]uclibc buildroot woes

Rob McMullen robm at flipturn.org
Wed May 7 00:03:39 UTC 2003


Here's a big 'ol hack, but it got me around the problem...  An ldd on
the 'chew' program showed that it was compiled against uClibc instead
of the host system's glibc, so by copying
build_i386/staging_dir/lib/*uClibc* to /lib (the host system's /lib!) 
and rerunning the make, it found the correct library.

I probably could have got around it also by adding
build_i386/staging_dir/lib to LD_LIBRARY_PATH, but I didn't think of
that at the time. :) The point being that chew and gengenrtl are
programs generated for the target environment and linked with the
target libraries, but are executed on the host system during the build
process.

Rob


At 06 May 2003 12:46:36 -0600,
Jeremy Jones wrote:
> 
> Hey folks,
> 
> I'm cross posting this to both the uclibc and crux mailing lists in the
> hopes that someone at either end might be able to help me out...
> 
> Notes on my host system:
> 
> crux-1.1 w/binutils-2.13.2.1, gcc-3.2.3, glibc-2.3.2, linux-2.4.20
> 
> Need any other info?  I'm happy to give it...
> 
> And here's some of the noteworthy portions of the top level Makefile for
> buildroot:
> 
> TARGETS=
> ARCH:=i386
> USE_UCLIBC_TOOLCHAIN:=true
> GCC_2_95_TOOLCHAIN:=false
> USE_UCLIBC_SNAPSHOT:=false
> USE_BUSYBOX_SNAPSHOT:=false
> BUILD_WITH_LARGEFILE:=true
> WGET:=wget --passive-ftp
> OPTIMIZE_FOR_CPU=i686
> EXTRA_GCC_CONFIG_OPTIONS=
> ifeq ($(USE_UCLIBC_TOOLCHAIN),true)
> TARGETS+=uclibc_toolchain
> endif
> TARGETS+=user-mode-linux
> TARGETS+=busybox tinylogin
> TARGETS+=coreutils findutils bash make diffutils patch sed
> TARGETS+=ed flex bison file gawk tar grep gcc_target
> <no changes beyone here...>
> 
> Trying to generate a uclibc system from the buildroot scripts, I'm
> bumping into a couple problems.  The first: binutils in gcc_target. 
> This may be due to something I lack in my host distribution... anyway
> here's the last few lines before bombing:
> 
> make \
>     prefix=/usr/src/buildroot/build_i386/root/usr \
>     exec_prefix=/usr/src/buildroot/build_i386/root/usr \
>     bindir=/usr/src/buildroot/build_i386/root/usr/bin \
>     sbindir=/usr/src/buildroot/build_i386/root/usr/sbin \
>     libexecdir=/usr/src/buildroot/build_i386/root/usr/lib \
>     datadir=/usr/src/buildroot/build_i386/root/usr/share \
>     sysconfdir=/usr/src/buildroot/build_i386/root/etc \
>     sharedstatedir=/usr/src/buildroot/build_i386/root/usr/com \
>     localstatedir=/usr/src/buildroot/build_i386/root/var \
>     libdir=/usr/src/buildroot/build_i386/root/usr/lib \
>     infodir=/usr/src/buildroot/build_i386/root/usr/info \
>     mandir=/usr/src/buildroot/build_i386/root/usr/man \
>     includedir=/usr/src/buildroot/build_i386/root/usr/include \
>     gxx_include_dir=/usr/src/buildroot/build_i386/root/usr/include/c++ \
>    
> toolexecdir=/usr/src/buildroot/build_i386/root/lib/gcc-lib/i686-linux \
>     -C /usr/src/buildroot/build_i386/binutils-target install;
> make[1]: Entering directory
> `/usr/src/buildroot/build_i386/binutils-target'
> /bin/sh
> /usr/src/buildroot/toolchain_build_i386/binutils-2.13.2.1/mkinstalldirs
> /usr/src/buildroot/build_i386/root/usr
> /usr/src/buildroot/build_i386/root/usr
> make[2]: Entering directory
> `/usr/src/buildroot/build_i386/binutils-target/bfd'
> Making install in doc
> make[3]: Entering directory
> `/usr/src/buildroot/build_i386/binutils-target/bfd/doc'
> make[4]: Entering directory
> `/usr/src/buildroot/build_i386/binutils-target/bfd/doc'
> make[4]: Nothing to be done for `install-exec-am'.
> make[4]: Nothing to be done for `install-data-am'.
> make[4]: Leaving directory
> `/usr/src/buildroot/build_i386/binutils-target/bfd/doc'
> /usr/src/buildroot/build_i386/staging_dir/bin/i386-uclibc-gcc -c -I..
> -I/usr/src/buildroot/toolchain_build_i386/binutils-2.13.2.1/bfd/doc/..
> -I/usr/src/buildroot/toolchain_build_i386/binutils-2.13.2.1/bfd/doc/../../include -I/usr/src/buildroot/toolchain_build_i386/binutils-2.13.2.1/bfd/doc/../../intl -I../../intl  -g -O2 /usr/src/buildroot/toolchain_build_i386/binutils-2.13.2.1/bfd/doc/chew.c
> /usr/src/buildroot/build_i386/staging_dir/bin/i386-uclibc-gcc -o chew
> chew.o
> /chew -f
> /usr/src/buildroot/toolchain_build_i386/binutils-2.13.2.1/bfd/doc/doc.str </usr/src/buildroot/toolchain_build_i386/binutils-2.13.2.1/bfd/doc/../aoutx.h >aoutx.tmp
> /bin/sh: ./chew: No such file or directory
> make[3]: *** [s-aoutx] Error 127
> make[3]: Leaving directory
> `/usr/src/buildroot/build_i386/binutils-target/bfd/doc'
> make[2]: *** [install-recursive] Error 1
> make[2]: Leaving directory
> `/usr/src/buildroot/build_i386/binutils-target/bfd'
> make[1]: *** [install-bfd] Error 2
> make[1]: Leaving directory
> `/usr/src/buildroot/build_i386/binutils-target'
> make: *** [/usr/src/buildroot/build_i386/root/usr/bin/ld] Error 2
> bash-2.05a#
> 
> Running file on build_i386/binutils-target/bfd/doc/chew tells me:
> 
> build_i386/binutils-target/bfd/doc/chew: ELF 32-bit LSB executable,
> Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs),
> not stripped
> 
> I get past this problem by editing the bfd/Makefile, and bypassing the
> doc subdir:
> 
> bash-2.05a# diff build_i386/binutils-target/bfd/Makefile~
> build_i386/binutils-target/bfd/Makefile
> 134c134
> < SUBDIRS = doc po
> ---
> > SUBDIRS = po
> 
> 
> So, I get past that and go on my merry way, until gcc in gcc_target:
> 
> make[2]: Entering directory
> `/usr/src/buildroot/build_i386/gcc-target/gcc'
> HEADERS="auto-host.h ansidecl.h  i386/i386.h i386/att.h dbxelf.h elfos.h
> svr4.h linux.h i386/linux.h defaults.h" DEFINES="POSIX" \
> TARGET_CPU_DEFAULT="TARGET_CPU_DEFAULT_pentiumpro" \
> /bin/sh
> /usr/src/buildroot/toolchain_build_i386/gcc-3.2.3/gcc/mkconfig.sh
> config.h
> HEADERS="auto-host.h ansidecl.h  i386/i386.h i386/att.h dbxelf.h elfos.h
> svr4.h linux.h i386/linux.h defaults.h" DEFINES="POSIX" \
> TARGET_CPU_DEFAULT="TARGET_CPU_DEFAULT_pentiumpro" \
> /bin/sh
> /usr/src/buildroot/toolchain_build_i386/gcc-3.2.3/gcc/mkconfig.sh
> hconfig.h /usr/src/buildroot/build_i386/staging_dir/bin/i386-uclibc-gcc
> -c -DIN_GCC    -g -O2 -W -Wall -Wwrite-strings -Wstrict-prototypes
> -Wmissing-prototypes -Wtraditional -pedantic -Wno-long-long 
> -DHAVE_CONFIG_H -DGENERATOR_FILE    -I. -I.
> -I/usr/src/buildroot/toolchain_build_i386/gcc-3.2.3/gcc
> -I/usr/src/buildroot/toolchain_build_i386/gcc-3.2.3/gcc/.
> -I/usr/src/buildroot/toolchain_build_i386/gcc-3.2.3/gcc/config
> -I/usr/src/buildroot/toolchain_build_i386/gcc-3.2.3/gcc/../include
> /usr/src/buildroot/toolchain_build_i386/gcc-3.2.3/gcc/gengenrtl.c -o
> gengenrtl.o
> /usr/src/buildroot/build_i386/staging_dir/bin/i386-uclibc-gcc
> -DIN_GCC    -g -O2 -W -Wall -Wwrite-strings -Wstrict-prototypes
> -Wmissing-prototypes -Wtraditional -pedantic -Wno-long-long 
> -DHAVE_CONFIG_H -DGENERATOR_FILE  -o gengenrtl \
>     gengenrtl.o ../libiberty/libiberty.a
> /gengenrtl -h > tmp-genrtl.h
> /bin/sh: ./gengenrtl: No such file or directory
> make[2]: *** [s-genrtl] Error 127
> make[2]: Leaving directory
> `/usr/src/buildroot/build_i386/gcc-target/gcc'
> make[1]: *** [all-gcc] Error 2
> make[1]: Leaving directory `/usr/src/buildroot/build_i386/gcc-target'
> make: *** [/usr/src/buildroot/build_i386/gcc-target/.compiled] Error 2
> bash-2.05a#
> 
> Being semi-retarded, this one stumps me.  Again, file sez:
> 
> build_i386/gcc-target/gcc/gengenrtl: ELF 32-bit LSB executable, Intel
> 80386, version 1 (SYSV), dynamically linked (uses shared libs), not
> stripped
> 
> 
> Any ideas?  I'm fresh out.  Haven't been able to find anything very
> illuminating googling...
> 
> Thanks a million,
> 
> Jeremy
> 
> _______________________________________________
> uClibc mailing list
> uClibc at uclibc.org
> http://uclibc.org/mailman/listinfo/uclibc
> 


More information about the uClibc mailing list