首页 > 系统管理 > LFS > LFS7.6 015 Glibc-2.20 + 调整工具链
2015
03-12

LFS7.6 015 Glibc-2.20 + 调整工具链

LFS7.6 015 Glibc-2.20 + 调整工具链

一、Glibc-2.20

1.解压并切换到相应的目录:

tar xvf glibc-2.20.tar.xz
cd glibc-2.20

2.打补丁:

patch -Np1 -i ../glibc-2.20-fhs-1.patch

3.创建并切换到编译目录:

mkdir -v ../glibc-build
cd ../glibc-build

4.配置参数:

../glibc-2.20/configure \
--prefix=/usr \
--disable-profile \
--enable-kernel=2.6.32 \
--enable-obsolete-rpc

5.开始编译:

make -j4

6.开始检查:

make check

7.为了防止其提示警告缺少ld.so.conf:

touch /etc/ld.so.conf

8.开始安装:

make install

9.为nscd安装配置文件和运行时目录:

cp -v ../glibc-2.20/nscd/nscd.conf /etc/nscd.conf
mkdir -pv /var/cache/nscd

10.字体:

单个的 locales可以通过使用localedef程序来安装。例如,下面的第一个 localedef命令将 /usr/share/i18n/locales/cs_CZ 字符集独立的区域设置定义和/usr/share/i18n/charmaps/UTF-8.gz 字符表定义相结合, 并将结果添加到 /usr/lib/locale/locale-archive 文件中。 下面的说明将会安装一个通过测试所需locale的最小集合:

mkdir -pv /usr/lib/locale
localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i de_DE -f UTF-8 de_DE.UTF-8
localedef -i en_GB -f UTF-8 en_GB.UTF-8
localedef -i en_HK -f ISO-8859-1 en_HK
localedef -i en_PH -f ISO-8859-1 en_PH
localedef -i en_US -f ISO-8859-1 en_US
localedef -i en_US -f UTF-8 en_US.UTF-8
localedef -i es_MX -f ISO-8859-1 es_MX
localedef -i fa_IR -f UTF-8 fa_IR
localedef -i fr_FR -f ISO-8859-1 fr_FR
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i fr_FR -f UTF-8 fr_FR.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i it_IT -f UTF-8 it_IT.UTF-8
localedef -i ja_JP -f EUC-JP ja_JP
localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R
localedef -i ru_RU -f UTF-8 ru_RU.UTF-8
localedef -i tr_TR -f UTF-8 tr_TR.UTF-8
localedef -i zh_CN -f GB18030 zh_CN.GB18030

另外,你可以安装你的国家、语言和字符集所对应的 locale 。

也就是说如果只想安装中文的话,做为替代执行下面的命令即可:

mkdir -pv /usr/lib/locale
localedef -i zh_CN -f GB18030 zh_CN
localedef -i zh_CN -f GBK zh_CN
localedef -i zh_CN -f UTF-8 zh_CN
localedef -i zh_CN -f GB2312 zh_CN
localedef -i zh_HK -f UTF-8 zh_CN
localedef -i zh_HK -f BIG5-HKSCS zh_CN
localedef -i zh_TW -f EUC-TW zh_CN
localedef -i zh_TW -f UTF-8 zh_CN
localedef -i zh_TW -f BIG5 zh_CN

11.当然,利用下面的命令,你可以一次安装所有列在 glibc-2.20/localedata/SUPPORTED 文件 (它包括上面所列的以及更多的locale) 中的locales:

make localedata/install-locales

12.创建一个新的文件/etc/nsswitch.conf,通过下面的命令:

cat > /etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files
hosts: files dns
networks: files
protocols: files
services: files
ethers: files
rpc: files
# End /etc/nsswitch.conf
EOF

13.安装时区文件:

tar -xf ../tzdata2014g.tar.gz
ZONEINFO=/usr/share/zoneinfo
mkdir -pv $ZONEINFO/{posix,right}
for tz in etcetera southamerica northamerica europe africa antarctica \
asia australasia backward pacificnew systemv; do
zic -L /dev/null -d $ZONEINFO -y "sh yearistype.sh" ${tz}
zic -L /dev/null -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz}
zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz}
done
cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO
zic -d $ZONEINFO -p America/New_York
unset ZONEINFO

14.设定本地时间的一种方法是运行下面的脚本:

tzselect

过程中,可以发现时区为Asia/Shanghai

所以这里:

cp -v /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

15、配置动态链接库加载程序:

默认情况下,动态链接库加载程序 (/lib/ld-linux.so.2) 搜索 /lib 和 /usr/lib 目录来寻找程序运行时需要使用的动态连接库。 但是, 如果某些库在这两个目录之外, 你就需要把它们的路径加到 /etc/ld.so.conf 文件里,以便动态链接库加载程序能够找到它们。 /usr/local/lib 和 /opt/lib 是两个经常包含动态连接库但又不在默认目录中的目录, 我们要把它们添加到动态链接库加载程序的搜索路径中。

使用如下命令创建新的 /etc/ld.so.conf 文件:

cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib
EOF

如果需要,动态加载程序也可以搜索一个目录和包括在那里发现的文件的内容。一般来说,这些文件包括目录只是添加一行文字指定出所需库路径即可。运行以下命令添加这个功能:

cat >> /etc/ld.so.conf << "EOF"
# Add an include directory
include /etc/ld.so.conf.d/*.conf
EOF
mkdir -pv /etc/ld.so.conf.d

16.扫尾:

cd ..
rm -rf glibc-2.20
rm -rf glibc-build

二、调整工具链:

1.首先,备份 /tools 目录下的链接, 用我们在第 5 章中编译的链接器来替换。 我们还要创建一个链接到 /tools/$(gcc -dumpmachine)/bin 的副本:

mv -v /tools/bin/{ld,ld-old}
mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}
mv -v /tools/bin/{ld-new,ld}
ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld

2.接下来,修正 GCC 的 specs 文件,使它指向新的动态链接器,只需要删除“/tools” 的所有实例, 就会留下指向动态连接器的正确路径。 也要调整specs文件, 这样 GCC 才能知道在哪能找到正确的头文件和Glibc开始文件。 运行一个 sed 命令:

gcc -dumpspecs | sed -e 's@/tools@@g' \
-e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \
-e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' > \
`dirname $(gcc --print-libgcc-file-name)`/specs

3.现在有必要停下来,检查一下调整过的工具链的基本功能(编译和连接)是否正常, 我们进行下面的一些合理性检查:

执行:

echo 'main(){}' > dummy.c
cc dummy.c -v -Wl,--verbose &> dummy.log
readelf -l a.out | grep ': /lib'

出现

[Requesting program interpreter: /lib/ld-linux.so.2]

执行:

grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log

出现

/usr/lib/crt1.o succeeded
/usr/lib/crti.o succeeded
/usr/lib/crtn.o succeeded

执行:

grep -B1 '^ /usr/include' dummy.log

出现:

#include <...> search starts here:
/usr/include

执行:

grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'

出现:

SEARCH_DIR("/usr/lib")
SEARCH_DIR("/lib");

执行:

grep "/lib.*/libc.so.6 " dummy.log

出现:

attempt to open /lib/libc.so.6 succeeded

执行:

grep found dummy.log

出现:

found ld-linux.so.2 at /lib/ld-linux.so.2

4.确定一切正常后,删除测试文件:

rm -v dummy.c a.out dummy.log

下一步:LFS7.6 016 Zlib-1.2.8 + File-5.19 + Binutils-2.24 + GMP-6.0.0a




最后编辑:
作者:PurStar
PurStar
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复