|
|

楼主 |
发表于 2005-3-31 11:38:28
|
显示全部楼层
===================》原文翻译《===========================
构建临时的构建系统
这些步骤很大程度上与LFS 5.0第5章相似。具体的资料可以到那里参考。
这个构建过程与LFS 5的不同点主要有:
* 你必须确保在PATH中包含了交叉编译工具链,它应该位于/tools/bin之后但要在宿主机的32为工具链之前:
export PATH=/tools/bin:/opt/x86_64/x86_64-unknown-linux/bin PATH
* 部分软件版本号有所不同:bison-1.75代替bison-1.875(GNU 服务器的所有者临时让bison-1.875不可用)。Linux-2.4.24代替Linux-2.4.23(因为前者更好)
* "锁定"glibc的步骤有所改变,因为动态连接器的名字和位置都有所改变。
下面给出完整的步骤,仅在和LFS 5.0有区别的地方做一下注释。
i686/x86_64 双重配置的惯例是i686的库放在/lib下,x86_64的库放在/lib64目录下。某些要构建的组件会将库文件放在/lib下面,即使你告诉他要放在/lib64下面。我们希望所有的库文件都放在同一个目录下面,既然我们现在还不需要i686的库,我们可以在构建binutils之前创建一些软连接:
mkdir /tools/lib
ln -s lib /tools/lib64
binutils-2.14, 第一遍
确保PATH已经如上设置好,让新的交叉编译器出现在宿主机的默认编译器之前。
mkdir ../binutils-build
cd ../binutils-build
../binutils-2.14/configure \
--prefix=/tools --disable-nls
make configure-host
make LDFLAGS="-all-static"
make install
make -C ld clean
make -C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib
gcc-3.3.1 第一遍
mkdir ../gcc-build
cd ../gcc-build
../gcc-3.3.1/configure --prefix=/tools \
--with-local-prefix=/opt/x86-64 \
--disable-nls --enable-shared \
--enable-languages=c
make BOOT_LDFLAGS="-static" bootstrap
make install
ln -sf gcc /tools/bin/cc
--with-local-prefix=/opt/x86-64 这个选项确保编译过程使用的是交叉编译工具链的头文件。
linux-2.4.24 头文件
make mrproper
yes "" | make config
make include/linux/version.h
make symlinks
mkdir /tools/include/asm
cp include/asm/* /tools/include/asm
cp -R include/asm-generic /tools/include
cp -R include/linux /tools/include
touch /tools/include/linux/autoconf.h
glibc-2.3.2
tar xjvf ../glibc-linuxthreads-2.3.2.tar.bz2
mkdir /tools/etc
touch /tools/etc/ld.so.conf
patch -Np1 -i ../glibc-2.3.2-sscanf-1.patch
mkdir ../glibc-build
cd ../glibc-build
../glibc-2.3.2/configure --prefix=/tools \
--disable-profile --enable-add-ons \
--with-headers=/tools/include \
--with-binutils=/tools/bin \
--without-gd
make
make install
make localedata/install-locales
锁定libc
在binutils-build目录运行:
make -C ld install
SPECFILE=/tools/lib/gcc-lib/*/*/specs &&
sed -e 's@ /lib64/ld-linux-x86-64.so.2@ /tools/lib64/ld-linux-x86-64.so.2@g' \
$SPECFILE > tempspecfile &&
mv -f tempspecfile $SPECFILE &&
sed -e 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g' \
$SPECFILE > tempspecfile &&
mv -f tempspecfile $SPECFILE &&
unset SPECFILE
rm -f /tools/lib/gcc-lib/*/*/include/{pthread.h,bits/sigthread.h}
i686/x86_64双系统配置要求i686的库安装在/lib下,而x86_64的库安装在/lib64下。同时,动态加载器的名字也不同。技术上,既然我们不构建ia32的库,我们也许应当完全禁止spec文件中的32位配置。但是我留着它似乎也没什么害处,还是留着吧。
tcl-8.4.4
cd unix
./configure --prefix=/tools
make
make install
expect-5.39.0
patch -Np1 -i ../expect-5.39.0-spawn.patch
./configure --prefix=/tools --with-tcl=/tools/lib --with-x=no
make
make SCRIPTS="" install
DejaGnu-1.4.3
./configure --prefix=/tools
make install
gcc-3.3.1 第二遍
patch -Np1 -i ../gcc-3.3.1-no_fixincludes-2.patch
patch -Np1 -i ../gcc-3.3.1-specs-2.patch
mkdir ../gcc-build
cd ../gcc-build
../gcc-3.3.1/configure --prefix=/tools \
--with-local-prefix=/tools \
--disable-multilib \
--enable-clocale=gnu --enable-shared \
--enable-threads=posix --enable-__cxa_atexit \
--enable-languages=c,c++
make
make -k check
make install
默认情况下,配置x86_64时gcc会尝试同时支持i686和x86_64。--disable-multilib 可以让它不再试图支持i686。
binutils-2.14, 第二遍
mkdir ../binutils-build
cd ../binutils-build
../binutils-2.14/configure --prefix=/tools \
--enable-shared --with-lib-path=/tools/lib
make -j
make check
make install
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
gawk-3.1.3
./configure --prefix=/tools
make
make install
coreutils-5.0
./configure --prefix=/tools
make
make install
bzip2-1.0.2
make PREFIX=/tools install
gzip-1.3.5
./configure --prefix=/tools
make
make install
diffutils-2.8.1
./configure --prefix=/tools
make
make install
findutils-4.1.20
./configure --prefix=/tools
make
make install
make-3.80
./configure --prefix=/tools
make
make install
grep-2.5.1
./configure --prefix=/tools \
--disable-perl-regexp --with-included-regex
make
make install
sed-4.0.7
./configure --prefix=/tools
make
make install
gettext-0.12.1
CXXFLAGS='-nostdlib' ./configure --prefix=/tools
make -j $CC_PARALLEL
make install
我发现 -nostdlib 选项需要用来防止C++编译器尝试连接到部分C运行库的两个拷贝。
ncurses-5.3
patch -Np1 -i ../ncurses-5.3-etip-2.patch
patch -Np1 -i ../ncurses-5.3-vsscanf.patch
./configure --prefix=/tools --with-shared \
--without-debug --without-ada --enable-overwrite
make
make install
patch-2.5.4
./configure --prefix=/tools
make
make install
tar-1.13.25
./configure --prefix=/tools
make
make install
texinfo-4.6
./configure --prefix=/tools
make
make install
bash-2.05b
patch -Np1 -i ../bash-2.05b-2.patch
./configure --prefix=/tools
make
make install
ln -s bash /tools/bin/sh
util-linux-2.12
cp configure configure.backup
sed "s@/usr/include@/tools/include@g" configure.backup > configure
./configure
make -C lib
make -C mount mount umount
make -C text-utils more
cp mount/{,u}mount text-utils/more /tools/bin
perl-5.8.0
patch -Np1 -i ../perl-5.8.0-libc-3.patch
chmod u+w hints/linux.sh
echo 'static_ext="IO re Fcntl"' >> hints/linux.sh
./configure.gnu --prefix=/tools
make perl utilities
cp perl pod/pod2man /tools/bin
mkdir -p /tools/lib/perl5/5.8.0
cp -R lib/* /tools/lib/perl5/5.8.0
下一步:构建基本系统
======================================================
20040402:
经试验,第一遍编译GCC尚须添加--disable-multilib参数,否则后面无法编译glibc。此外,库文件的调整也很重要(mkdie /tools/lib && ln -s lib64 /tools/lib),如果不加调整,可以通过编译译,但后面编译Tck的时候会出现问题。而且,这样出来的系统似乎不是纯64位的。
因为不是使用LFC 5.0编译,因此不知道这是否原文的BUG |
|