天天看点

重走LFS之路:(九) 基础系统编译-2重走LFS之路:(九) 基础系统编译-2

重走LFS之路:(九) 基础系统编译-2重走LFS之路:(九) 基础系统编译-2

(题图来自: techradar.com)

<a target="_blank"></a>

gmp编译有点不同,在编译选项配置阶段需要确定架构

还是先进入/src,解压并进入gmp源码目录

<code>cd /src</code>

<code>tar xf gmp-6.0.0a.tar.xz</code>

<code>cd gmp-6.0.0</code>

如果是x86 – 32bit,则需要在配置编译选项时前面加点东西

<code>abi=32 ./configure …</code>

如果是x86_64就继续配置编译选项

<code>./configure –prefix=/usr \</code>

<code>–enable-cxx \</code>

<code>–docdir=/usr/share/doc/gmp-6.0.0a</code>

gmp是有文档需要生成的,所以这一步编译之后要再生成一下文档

<code>make</code>

<code>make html</code>

进行编译测试并生成测试日志

<code>make check 2&gt;&amp;1 | tee gmp-check-log</code>

从测试日志中找出测试通过的结果总数,共有188项测试

<code>awk ‘/tests passed/{total+=$2} ; end{print total}’ gmp-check-log</code>

重走LFS之路:(九) 基础系统编译-2重走LFS之路:(九) 基础系统编译-2

2-gmptest

测试全部通过,这时要安装两部分,一部分是gmp,还有它的文档

<code>make install</code>

<code>make install-html</code>

回到/src目录,解压并进入mpfr的源码目录

<code>tar xf mpfr-3.1.2.tar.xz</code>

<code>cd mpfr-3.1.2</code>

mpfr是需要先打补丁再配置和编译的

<code>patch -np1 -i ../mpfr-3.1.2-upstream_fixes-3.patch</code>

配置编译选项

<code>–enable-thread-safe \</code>

<code>–docdir=/usr/share/doc/mpfr-3.1.2</code>

依然是编译和生成文档

检查编译

<code>make check</code>

安装mpfr和它的文档

依然是回到/src目录来解压和进入mpc源码目录

<code>tar zxvf mpc-1.0.2.tar.gz</code>

<code>cd mpc-1.0.2</code>

配置编译选项时有点不同,需要指定文档安装目录

<code>./configure –prefix=/usr –docdir=/usr/share/doc/mpc-1.0.2</code>

编译和生成文档

编译检查

安装mpc和文档

再次编译gcc,我们至少应该编译过两遍以上了,非常熟悉

依旧是进入/src/gcc-4.9.2,由于以前编译过,先把gcc-build重命名,再新建一个空目录构建

<code>cd /src/gcc-4.9.2</code>

<code>mv ../gcc-build ../gcc-build.tool</code>

<code>mkdir -v ../gcc-build</code>

<code>cd ../gcc-build</code>

定义sed变量为sed的别名,然后配置编译选项

<code>sed=sed \</code>

<code>../gcc-4.9.2/configure \</code>

<code>–prefix=/usr \</code>

<code>–enable-languages=c,c++ \</code>

<code>–disable-multilib \</code>

<code>–disable-bootstrap \</code>

<code>–with-system-zlib</code>

编译gcc

编译完成,在测试之前需要修改堆栈限制

<code>ulimit -s 32768</code>

执行编译测试

<code>make -k check</code>

实测这个测试要做好久好久,如果你不是强迫症患者,可以选择跳过这一步……

如果你是强迫症患者没有跳过测试,那么在测试完成后可以执行一个脚本来查看结果

<code>../gcc-4.9.2/contrib/test_summary</code>

没什么事就安装吧

只不过在安装之后,gcc需要手动去做符号链接

<code>ln -sv ../usr/bin/cpp /lib</code>

<code>ln -sv gcc /usr/bin/cc</code>

<code>install -v -dm755 /usr/lib/bfd-plugins</code>

<code>ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/4.9.2/liblto_plugin.so /usr/lib/bfd-plugins/</code>

下面来进行测试

<code>echo ‘main(){}’ &gt; dummy.c</code>

<code>cc dummy.c -v -wl,–verbose &amp;&gt; dummy.log</code>

<code>readelf -l a.out | grep ‘: /lib’</code>

我这里是什么都没显示,文档说要显示个东西

<code>[requesting program interpreter: /lib/ld-linux.so.2]</code>

然后要查看日志

<code>grep -o ‘/usr/lib.*/crt[1in].*succeeded’ dummy.log</code>

<code>grep -b4 ‘^ /usr/include’ dummy.log</code>

<code>grep ‘search.*/usr/lib’ dummy.log |sed ‘s|; |\n|g’</code>

<code>grep “/lib.*/libc.so.6 ” dummy.log</code>

<code>grep found dummy.log</code>

这几个只要有显示,没报错,就应该没啥问题

清理测试现场

<code>rm -v dummy.c a.out dummy.log</code>

最后安装一些其他的文件

<code>mkdir -pv /usr/share/gdb/auto-load/usr/lib</code>

<code>mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</code>

据说到这时候gcc就安装完成了。

这也是个得打补丁的东西,而且还得改两行makefile

<code>cd /src</code>

<code>rm -rf /src/bzip2-1.0.6</code>

<code>tar zxvf bzip2-1.0.6.tar.gz</code>

<code>cd bzip2-1.0.6</code>

<code>patch -np1 -i ../bzip2-1.0.6-install_docs-1.patch</code>

<code>sed -i ‘s@\(ln -s -f \)$(prefix)/bin/@\1@’ makefile</code>

<code>sed -i “s@(prefix)/man@(prefix)/share/man@g” makefile</code>

这里有个准备编译,如果是在上次编译的那个目录里做的话,这一步会报错

<code>make -f makefile-libbz2_so</code>

<code>make clean</code>

编译和安装

<code>make prefix=/usr install</code>

还需要手动安装模块文件和建立符号链接

<code>cp -v bzip2-shared /bin/bzip2</code>

<code>cp -av libbz2.so* /lib</code>

<code>ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so</code>

<code>rm -v /usr/bin/{bunzip2,bzcat,bzip2}</code>

<code>ln -sv bzip2 /bin/bunzip2</code>

<code>ln -sv bzip2 /bin/bzcat</code>

回到/src,解压并进入源码目录

<code>tar zxvf pkg-config-0.28.tar.gz</code>

<code>cd pkg-config-0.28</code>

编译选项配置的时候会有几个参数调整

<code>–with-internal-glib \</code>

<code>–disable-host-tool \</code>

<code>–docdir=/usr/share/doc/pkg-config-0.28</code>

然后编译,测试,安装一气呵成

由于以前编译过,所以需要重命名后再重新解压源码目录

<code>mv ncurses-5.9 ncurses-5.9.tool</code>

<code>tar zxvf ncurses-5.9.tar.gz</code>

<code>cd ncurses-5.9</code>

调整几个编译配置

<code>–mandir=/usr/share/man \</code>

<code>–with-shared \</code>

<code>–without-debug \</code>

<code>–enable-pc-files \</code>

<code>–enable-widec</code>

编译安装

还需要手工安装模块和简历符号链接

<code>mv -v /usr/lib/libncursesw.so.5* /lib</code>

<code></code>

<code>ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so</code>

<code>for lib in ncurses form panel menu ; do</code>

<code>rm -vf /usr/lib/lib${lib}.so</code>

<code>echo “input(-l${lib}w)” &gt; /usr/lib/lib${lib}.so</code>

<code>ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a</code>

<code>ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc</code>

<code>done</code>

<code>ln -sfv libncurses++w.a /usr/lib/libncurses++.a</code>

<code>rm -vf /usr/lib/libcursesw.so</code>

<code>echo “input(-lncursesw)” &gt; /usr/lib/libcursesw.so</code>

<code>ln -sfv libncurses.so /usr/lib/libcurses.so</code>

<code>ln -sfv libncursesw.a /usr/lib/libcursesw.a</code>

<code>ln -sfv libncurses.a /usr/lib/libcurses.a</code>

最后来安装文档

<code>mkdir -v /usr/share/doc/ncurses-5.9</code>

<code>cp -v -r doc/* /usr/share/doc/ncurses-5.9</code>

但是这时候有个问题,它不支持非宽字符集,我们需要再做点事情

<code>make distclean</code>

<code>–without-normal \</code>

<code>–without-cxx-binding</code>

<code>make sources libs</code>

<code>cp -av lib/lib*.so.5* /usr/lib</code>

原文发布时间:2015-04-16

本文来自云栖合作伙伴“linux中国”

继续阅读