Hi,<br><br>I am attempting to build a cross toolchain in order to create a custom embedded system. Through the advice of the book "Building Embedded Linux Systems" I found the CLFS website and guide.<br><br>Now I am not using the CLFS guide verbatim, but I am taking _heavy_ inspiration from it. That is, I'm mostly following it except where I believe I don't need to. Apparently my assumptions are wrong as I can not successfully build glibc. I have created a script that more or less follows your guide, so that my results are reproducible. I will attach the script inline to the bottom of this email so you can understand my process and where I diverge from the guide.<br>
<br>I got all the packages from the urls in the script except glibc, which I got from the clfs website at the following url: <a href="http://cross-lfs.org/files/packages/svn/glibc-2.8.tar.bz2">http://cross-lfs.org/files/packages/svn/glibc-2.8.tar.bz2</a><br>
<br>When I run this script I get the following error during what looks like the linking phase of glibc:<br><br>i686-pc-linux-gnu-gcc   -nostdlib -nostartfiles -r -o /home/jdufresne/devel/trunk/crosstools/build/glibc-build/elf/librtld.map.o '-Wl,-(' /home/jdufresne/devel/trunk/crosstools/build/glibc-build/elf/dl-allobjs.os /home/jdufresne/devel/trunk/crosstools/build/glibc-build/libc_pic.a -lgcc '-Wl,-)' -Wl,-Map,/home/jdufresne/devel/trunk/crosstools/build/glibc-build/elf/librtld.mapT<br>
/home/jdufresne/devel/trunk/crosstools/toolchain/lib/gcc/i686-pc-linux-gnu/4.3.2/../../../../i686-pc-linux-gnu/bin/ld: cannot find -lgcc<br>collect2: ld returned 1 exit status<br><br>The key error being: cannot find -lgcc<br>
<br>I have done extensive googling on this error and have not found much.<br><br>Now, if I look look for libgcc.a I do _not_ find it. So it appears that ld is telling the truth. If I look for libgcc.a this is all I see:<br>
<br>$ find . -name \*gcc\*<br>./toolchain/man/man1/i686-pc-linux-gnu-gcc.1<br>./toolchain/lib/gcc<br>./toolchain/bin/i686-pc-linux-gnu-gccbug<br>./toolchain/bin/i686-pc-linux-gnu-gcc-4.3.2<br>./toolchain/bin/i686-pc-linux-gnu-gcc<br>
./toolchain/libexec/gcc<br>./toolchain/i686-pc-linux-gnu/bin/gcc<br>./toolchain/info/<a href="http://gcc.info">gcc.info</a><br>./toolchain/info/<a href="http://gccinstall.info">gccinstall.info</a><br>./toolchain/info/<a href="http://gccint.info">gccint.info</a><br>
./build/gcc-4.3.2.tar.bz2<br>./build/gcc-static-build<br>./build/gcc-static-build/gcc<br>./build/gcc-static-build/gcc/gcc-options.o<br>./build/gcc-static-build/gcc/gcc.o<br>./build/gcc-static-build/gcc/xgcc<br>./build/gcc-static-build/gcc/gcc-vers.texi<br>
./build/gcc-static-build/gcc/libgcc.mvars<br>./build/gcc-static-build/gcc/gccspec.o<br>./build/gcc-static-build/gcc/gccbug<br>./build/gcc-static-build/gcc/gcc-cross<br>./build/gcc-static-build/gcc/doc/<a href="http://gcc.info">gcc.info</a><br>
./build/gcc-static-build/gcc/doc/<a href="http://gccinstall.info">gccinstall.info</a><br>./build/gcc-static-build/gcc/doc/<a href="http://gccint.info">gccint.info</a><br>./build/glibc-2.8/sysdeps/s390/gccframe.h<br>./build/glibc-2.8/sysdeps/sparc/gccframe.h<br>
./build/glibc-2.8/sysdeps/powerpc/gccframe.h<br>./build/glibc-2.8/sysdeps/powerpc/powerpc32/libgcc-compat.S<br>./build/glibc-2.8/sysdeps/ia64/gccframe.h<br>./build/glibc-2.8/sysdeps/ia64/ia64libgcc.S<br>./build/glibc-2.8/sysdeps/i386/gccframe.h<br>
./build/glibc-2.8/sysdeps/generic/gccframe.h<br>./build/glibc-2.8/sysdeps/alpha/gccframe.h<br>./build/glibc-2.8/sysdeps/sh/gccframe.h<br>./build/glibc-2.8/gnulib/tst-gcc.c<br><br><br>My question is, why is the build_gcc_static stage of my script not building and installing libgcc.a? Where should this end up after compilation? Do I need a new configure flag on gcc?<br>
<br>Thanks for any help,<br>Jon<br><br>-----<br>#!/bin/bash<br><br>unset CFLAGS<br>unset CXXFLAGS<br><br>KERNEL_ARCH=i386<br>HOST=i686-cross-linux-gnu<br>TARGET=i686-pc-linux-gnu<br><br>ROOTFS=`pwd`/rootfs<br>BUILD=`pwd`/build<br>
PREFIX=`pwd`/toolchain<br><br># latest<br>KERNEL_VERSION=<a href="http://2.6.27.4">2.6.27.4</a><br>BINUTILS_VERSION=2.19<br>GCC_VERSION=4.3.2<br>#GLIBC_VERSION=2.8-20081103<br>GLIBC_VERSION=2.8<br><br>PATH=${PREFIX}/bin:${PATH}<br>
export PATH<br><br>mkdirs()<br>{<br>   if [ ! -d ${BUILD} ]; then<br>       echo "creating ${BUILD}"<br>       mkdir -pv ${BUILD}<br>   fi<br><br>rm -rf \<br>${BUILD}/linux-${KERNEL_VERSION} \<br>${BUILD}/binutils-${BINUTILS_VERSION} \<br>
${BUILD}/binutils-build \<br>${BUILD}/gcc-${GCC_VERSION} \<br>${BUILD}/gcc-static-build \<br>${BUILD}/gcc-build \<br>${BUILD}/glibc-${GLIBC_VERSION} \<br>${BUILD}/glibc-headers-build \<br>${BUILD}/glibc-build \<br>${PREFIX} \<br>
${ROOTFS}<br>}<br><br>download_packages()<br>{<br>   if [ ! -f linux-${KERNEL_VERSION}.tar.bz2 ]; then<br>wget <a href="http://kernel.org/pub/linux/kernel/v2.6/linux-${KERNEL_VERSION}.tar.bz2">http://kernel.org/pub/linux/kernel/v2.6/linux-${KERNEL_VERSION}.tar.bz2</a><br>
   fi<br><br>if [ ! -f binutils-${BINUTILS_VERSION}.tar.bz2 ]; then<br>       wget <a href="http://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.bz2">http://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.bz2</a><br>
   fi<br><br>if [ ! -f gcc-${GCC_VERSION}.tar.bz2 ]; then<br>       wget <a href="http://gcc-ca.internet.bs/releases/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.bz2">http://gcc-ca.internet.bs/releases/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.bz2</a><br>
   fi<br><br>if [ ! -f glibc-${GLIBC_VERSION}.tar.bz2 ]; then<br>       wget <a href="http://ftp.gnu.org/gnu/glibc/glibc-${GLIBC_VERSION}.tar.bz2">http://ftp.gnu.org/gnu/glibc/glibc-${GLIBC_VERSION}.tar.bz2</a><br>   fi<br>
}<br><br>build_kernel_headers()<br>{<br>   echo "Building linux-${KERNEL_VERSION} headers ARCH=${KERNEL_ARCH}"<br><br>   tar xvjf linux-${KERNEL_VERSION}.tar.bz2<br>   cd linux-${KERNEL_VERSION}<br><br>   make ARCH=${KERNEL_ARCH} headers_check || exit<br>
   make ARCH=${KERNEL_ARCH} INSTALL_HDR_PATH=${ROOTFS}/usr headers_install || exit<br><br>   cd ..<br>   rm -rf linux-${KERNEL_VERSION}<br>}<br><br>build_binutils()<br>{<br>   echo "Building binutils-${BINUTILS_VERSION} HOST=${HOST} TARGET=${TARGET}"<br>
<br>   tar xjvf binutils-${BINUTILS_VERSION}.tar.bz2<br><br>   mkdir -v binutils-build<br>   cd binutils-build<br><br>   ../binutils-${BINUTILS_VERSION}/configure \<br>       --prefix=${PREFIX} \<br>       --build=${HOST} \<br>
       --host=${HOST} \<br>       --target=${TARGET} \<br>       --with-sysroot=${ROOTFS} \<br>       --disable-nls \<br>       --enable-shared \<br>       --disable-multilib \<br>       || exit<br><br>make configure-host || exit<br>
   make || exit<br>   make install || exit<br><br>   cd ..<br>   rm -rf binutils-build binutils-${BINUTILS_VERSION}<br>}<br><br>build_gcc_static()<br>{<br>   echo "Building gcc-${GCC_VERSION} stage1 TARGET=${PREFIX}"<br>
<br>   tar xjvf gcc-${GCC_VERSION}.tar.bz2<br><br>   mkdir -v gcc-static-build<br>   cd gcc-static-build<br><br>   ../gcc-${GCC_VERSION}/configure \<br>       --prefix=${PREFIX} \<br>       --build=${HOST} \<br>       --host=${HOST} \<br>
       --target=${TARGET} \<br>       --with-sysroot=${ROOTFS} \<br>       --disable-multilib \<br>       --disable-nls \<br>       --disable-shared \<br>       --disable-libgomp \<br>       --disable-libmudflap \<br>       --disable-libssp \<br>
       --enable-languages=c \<br>       || exit<br><br>   make all-gcc || exit<br>   make install-gcc || exit<br><br>   cd ..<br>   #rm -rf gcc-static-build gcc-${GCC_VERSION}<br>   rm -rf gcc-${GCC_VERSION}<br>}<br><br>build_glibc()<br>
{<br>echo "Building glibc-${GLIBC_VERSION}"<br><br>   tar xjvf glibc-${GLIBC_VERSION}.tar.bz2<br><br>   mkdir -v glibc-build<br>   cd glibc-build<br><br>echo "libc_cv_forced_unwind=yes" > config.cache<br>
echo "libc_cv_c_cleanup=yes" >> config.cache<br><br>   BUILD_CC=gcc \<br>   CC=${TARGET}-gcc \<br>   AR=${TARGET}-ar \<br>   RANLIB=${TARGET}-ranlib \<br>   ../glibc-${GLIBC_VERSION}/configure \<br>       --prefix=/usr \<br>
       --build=${HOST} \<br>       --host=${TARGET} \<br>       --disable-profile \<br>       --enable-add-ons \<br>       --with-tls \<br>       --enable-kernel=2.6.0 \<br>       --with-__thread \<br>       --with-binutils=${PREFIX}/bin \<br>
       --with-headers=${ROOTFS}/usr/include \<br>       --cache-file=config.cache \<br>       || exit<br><br>   make || exit<br>   make install_root=${ROOTFS} install || exit<br><br>   cd ..<br>   rm -rf glibc-build glibc-${GLIBC_VERSION}<br>
}<br><br>build_gcc()<br>{<br>   echo "Building gcc-${GCC_VERSION} final TARGET=${PREFIX}"<br><br>   tar xjvf gcc-${GCC_VERSION}.tar.bz2<br><br>   mkdir -v gcc-build<br>   cd gcc-build<br><br>   ../gcc-${GCC_VERSION}/configure \<br>
       --prefix=${PREFIX} \<br>       --build=${HOST} \<br>       --host=${HOST} \<br>       --target=${TARGET} \<br>       --with-sysroot=${ROOTFS} \<br>       --disable-multilib \<br>       --disable-nls \<br>       --enable-shared \<br>
       --enable-threads=posix \<br>       --enable-languages=c,c++ \<br>       --enable-__cxa_atexit \<br>       --enable-c99 \<br>       --enable-long-long \<br>       || exit<br><br>   make || exit<br>   make install || exit<br>
<br><br>   cd ..<br>   #rm -rf gcc-build gcc-${GCC_VERSION}<br>   rm -rf gcc-${GCC_VERSION}<br>}<br><br>mkdirs<br>cd $BUILD<br>download_packages<br><br>build_kernel_headers<br>build_binutils<br>build_gcc_static<br>build_glibc<br>
build_gcc<br><br>cd ..<br><br>----<br><br>$ toolchain/bin/i686-pc-linux-gnu-gcc -dumpspecs<br>*asm:<br>%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}<br><br>*asm_debug:<br>%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}} %{fdebug-prefix-map=*:--debug-prefix-map %*}<br>
<br>*asm_final:<br><br><br>*asm_options:<br>%{--target-help:%:print-asm-header()} %a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}<br><br>*invoke_as:<br>%{!S:-o %|.s |<br> as %(asm_options) %|.s %A }<br><br>*cpp:<br>%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}<br>
<br>*cpp_options:<br>%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w} %{f*} %{g*:%{!g0:%{!fno-working-directory:-fworking-directory}}} %{O*} %{undef} %{save-temps:-fpch-preprocess}<br>
<br>*cpp_debug_options:<br>%{d*}<br><br>*cpp_unique_options:<br>%{C|CC:%{!E:%eGCC does not support -C or -CC without -E}} %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*&F*} %{P} %I %{MD:-MD %{!o:%b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM:%{!MT:%{!MQ:%{MD|MMD:%{o*:-MQ %*}}}}}}} %{remap} %{g3|ggdb3|gstabs3|gcoff3|gxcoff3|gvms3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i %{fmudflap:-D_MUDFLAP -include mf-runtime.h} %{fmudflapth:-D_MUDFLAP -D_MUDFLAPTH -include mf-runtime.h} %{E|M|MM:%W{o*}}<br>
<br>*trad_capable_cpp:<br>cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}<br><br>*cc1:<br>%(cc1_cpu) %{profile:-p}<br><br>*cc1_options:<br>%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{--help:--help} %{--target-help:--target-help} %{--help=*:--help=%(VALUE)} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{fmudflap|fmudflapth:-fno-builtin -fno-merge-constants} %{coverage:-fprofile-arcs -ftest-coverage}<br>
<br>*cc1plus:<br><br><br>*link_gcc_c_sequence:<br>%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}<br><br>*link_ssp:<br>%{fstack-protector|fstack-protector-all:-lssp_nonshared -lssp}<br><br>*endfile:<br>%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}    %{mpc32:crtprec32.o%s}    %{mpc64:crtprec64.o%s}    %{mpc80:crtprec80.o%s}    %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s<br>
<br>*link:<br>%{!static:--eh-frame-hdr} -m %(link_emulation) %{shared:-shared}   %{!shared:     %{!ibcs:       %{!static:     %{rdynamic:-export-dynamic}     %{!dynamic-linker:-dynamic-linker %(dynamic_linker)}}     %{static:-static}}}<br>
<br>*lib:<br>%{pthread:-lpthread}    %{shared:-lc}    %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}<br><br>*mfwrap:<br> %{static: %{fmudflap|fmudflapth:  --wrap=malloc --wrap=free --wrap=calloc --wrap=realloc --wrap=mmap --wrap=munmap --wrap=alloca} %{fmudflapth: --wrap=pthread_create}} %{fmudflap|fmudflapth: --wrap=main}<br>
<br>*mflib:<br>%{fmudflap|fmudflapth: -export-dynamic}<br><br>*link_gomp:<br><br><br>*libgcc:<br>-lgcc<br><br>*startfile:<br>%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}}    crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}<br>
<br>*switches_need_spaces:<br><br><br>*cross_compile:<br>1<br><br>*version:<br>4.3.2<br><br>*multilib:<br>. ;<br><br>*multilib_defaults:<br><br><br>*multilib_extra:<br><br><br>*multilib_matches:<br><br><br>*multilib_exclusions:<br>
<br><br>*multilib_options:<br><br><br>*linker:<br>collect2<br><br>*link_libgcc:<br>%D<br><br>*md_exec_prefix:<br><br><br>*md_startfile_prefix:<br><br><br>*md_startfile_prefix_1:<br><br><br>*startfile_prefix_spec:<br><br><br>
*sysroot_spec:<br>--sysroot=%R<br><br>*sysroot_suffix_spec:<br><br><br>*sysroot_hdrs_suffix_spec:<br><br><br>*cc1_cpu:<br>%{mcpu=*:-mtune=%* %n`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.<br>
} %<mcpu=* %{mintel-syntax:-masm=intel %n`-mintel-syntax' is deprecated. Use `-masm=intel' instead.<br>} %{mno-intel-syntax:-masm=att %n`-mno-intel-syntax' is deprecated. Use `-masm=att' instead.<br>}%{march=native:%<march=native %:local_cpu_detect(arch)   %{!mtune=*:%<mtune=native %:local_cpu_detect(tune)}} %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}<br>
<br>*link_emulation:<br>elf_i386<br><br>*dynamic_linker:<br>%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}/lib/ld-uClibc.so.0;:/lib/ld-linux.so.2}<br><br>*link_command:<br>%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:    %(linker) %l %{pie:-pie} %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}    %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}    %{static:} %{L*} %(mfwrap) %(link_libgcc) %o    %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)} %(mflib)    %{fprofile-arcs|fprofile-generate|coverage:-lgcov}    %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}    %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}<br>
<br>----<br><br>$ toolchain/bin/i686-pc-linux-gnu-gcc -print-libgcc-file-name<br>libgcc.a<br><br><br>