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

简介:

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

(题图来自: techradar.com)

GMP-6.0.0a

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

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

 
 
  1. cd /src
  2. tar xf gmp-6.0.0a.tar.xz
  3. cd gmp-6.0.0

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

 
 
  1. ABI=32 ./configure

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

 
 
  1. ./configure –prefix=/usr \
  2. enable-cxx \
  3. docdir=/usr/share/doc/gmp-6.0.0a

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

 
 
  1. make
  2. make html

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

 
 
  1. make check 2>&1 | tee gmp-check-log

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

 
 
  1. awk ‘/tests passed/{total+=$2} ; END{print total}’ gmp-check-log

2-gmptest

2-gmptest

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

 
 
  1. make install
  2. make install-html

MPFR-3.1.2

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

 
 
  1. cd /src
  2. tar xf mpfr-3.1.2.tar.xz
  3. cd mpfr-3.1.2

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

 
 
  1. patch -Np1 -i ../mpfr-3.1.2-upstream_fixes-3.patch

配置编译选项

 
 
  1. ./configure –prefix=/usr \
  2. enable-thread-safe \
  3. docdir=/usr/share/doc/mpfr-3.1.2

依然是编译和生成文档

 
 
  1. make
  2. make html

检查编译

 
 
  1. make check

安装MPFR和它的文档

 
 
  1. make install
  2. make install-html

MPC-1.0.2

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

 
 
  1. cd /src
  2. tar zxvf mpc-1.0.2.tar.gz
  3. cd mpc-1.0.2

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

 
 
  1. ./configure –prefix=/usr docdir=/usr/share/doc/mpc-1.0.2

编译和生成文档

 
 
  1. make
  2. make html

编译检查

 
 
  1. make check

安装MPC和文档

 
 
  1. make install
  2. make install-html

GCC-4.9.2

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

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

 
 
  1. cd /src/gcc-4.9.2
  2. mv ../gcc-build ../gcc-build.tool
  3. mkdir -v ../gcc-build
  4. cd ../gcc-build

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

 
 
  1. SED=sed \
  2. ../gcc-4.9.2/configure \
  3. prefix=/usr \
  4. enable-languages=c,c++ \
  5. disable-multilib \
  6. disable-bootstrap \
  7. with-system-zlib

编译GCC

 
 
  1. make

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

 
 
  1. ulimit -s 32768

执行编译测试

 
 
  1. make -k check

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

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

 
 
  1. ../gcc-4.9.2/contrib/test_summary

没什么事就安装吧

 
 
  1. make install

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

 
 
  1. ln -sv ../usr/bin/cpp /lib
  2. ln -sv gcc /usr/bin/cc
  3. install -v -dm755 /usr/lib/bfd-plugins
  4. ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/4.9.2/liblto_plugin.so /usr/lib/bfd-plugins/

下面来进行测试

 
 
  1. echo main(){}’ > dummy.c
  2. cc dummy.c -v -Wl,–verbose &> dummy.log
  3. readelf -l a.out | grep ‘: /lib

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

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

然后要查看日志

 
 
  1. grep -o ‘/usr/lib.*/crt[1in].*succeeded dummy.log
  2. grep -B4 ‘^ /usr/include dummy.log
  3. grep SEARCH.*/usr/lib dummy.log |sed s|; |\n|g
  4. grep “/lib.*/libc.so.6 dummy.log
  5. grep found dummy.log

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

清理测试现场

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

最后安装一些其他的文件

 
 
  1. mkdir -pv /usr/share/gdb/auto-load/usr/lib
  2. mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib

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

Bzip2-1.0.6

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

 
 
  1. cd /src
  2. rm -rf /src/bzip2-1.0.6
  3. tar zxvf bzip2-1.0.6.tar.gz
  4. cd bzip2-1.0.6
  5. patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch
  6. sed -i s@\(ln -s -f \)$(PREFIX)/bin/@\1@’ Makefile
  7. sed -i s@(PREFIX)/man@(PREFIX)/share/man@g Makefile

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

 
 
  1. make -f Makefile-libbz2_so
  2. make clean

编译和安装

 
 
  1. make
  2. make PREFIX=/usr install

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

 
 
  1. cp -v bzip2-shared /bin/bzip2
  2. cp -av libbz2.so* /lib
  3. ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
  4. rm -v /usr/bin/{bunzip2,bzcat,bzip2}
  5. ln -sv bzip2 /bin/bunzip2
  6. ln -sv bzip2 /bin/bzcat

Pkg-config-0.28

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

 
 
  1. cd /src
  2. tar zxvf pkg-config-0.28.tar.gz
  3. cd pkg-config-0.28

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

 
 
  1. ./configure –prefix=/usr \
  2. with-internal-glib \
  3. disable-host-tool \
  4. docdir=/usr/share/doc/pkg-config-0.28

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

 
 
  1. make
  2. make check
  3. make install

Ncurses-5.9

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

 
 
  1. cd /src
  2. mv ncurses-5.9 ncurses-5.9.tool
  3. tar zxvf ncurses-5.9.tar.gz
  4. cd ncurses-5.9

调整几个编译配置

 
 
  1. ./configure –prefix=/usr \
  2. mandir=/usr/share/man \
  3. with-shared \
  4. without-debug \
  5. enable-pc-files \
  6. enable-widec

编译安装

 
 
  1. make
  2. make install

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

 
 
  1. mv -v /usr/lib/libncursesw.so.5* /lib
  2. ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so
  3. for lib in ncurses form panel menu ; do
  4. rm -vf /usr/lib/lib${lib}.so
  5. echo INPUT(-l${lib}w)” > /usr/lib/lib${lib}.so
  6. ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a
  7. ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc
  8. done
  9. ln -sfv libncurses++w.a /usr/lib/libncurses++.a
  10. rm -vf /usr/lib/libcursesw.so
  11. echo INPUT(-lncursesw)” > /usr/lib/libcursesw.so
  12. ln -sfv libncurses.so /usr/lib/libcurses.so
  13. ln -sfv libncursesw.a /usr/lib/libcursesw.a
  14. ln -sfv libncurses.a /usr/lib/libcurses.a

最后来安装文档

 
 
  1. mkdir -v /usr/share/doc/ncurses-5.9
  2. cp -v -R doc/* /usr/share/doc/ncurses-5.9

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

 
 
  1. make distclean
  2. ./configure prefix=/usr \
  3. with-shared \
  4. without-normal \
  5. without-debug \
  6. without-cxx-binding
  7. make sources libs
  8. cp -av lib/lib*.so.5* /usr/lib

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

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

目录
相关文章
|
5月前
|
Linux 编译器 C语言
《Linux从练气到飞升》No.05 Linux编译器gcc/g++的使用及编译过程 【云边有个小卖部】上新
《Linux从练气到飞升》No.05 Linux编译器gcc/g++的使用及编译过程 【云边有个小卖部】上新
63 0
|
14天前
|
缓存 网络协议 编译器
针对Android系统工程师的C/C++学习目录
针对Android系统工程师的C/C++学习目录
4 0
|
5月前
|
IDE Linux 开发工具
《Linux从练气到飞升》No.06 Linux项目自动化构建工具 make/Makefile 【云边有个小卖部】上新啦
《Linux从练气到飞升》No.06 Linux项目自动化构建工具 make/Makefile 【云边有个小卖部】上新啦
38 0
|
11月前
|
JavaScript 前端开发 Java
谈一谈 OpenHarmony 的方舟编译体系
谈一谈 OpenHarmony 的方舟编译体系
|
Linux
Buildroot系列开发(四)Linux工具链剖析(下)
Buildroot系列开发(四)Linux工具链剖析
74 3
Buildroot系列开发(四)Linux工具链剖析(下)
|
Linux 开发工具
Buildroot系列开发(四)Linux工具链剖析(上)
Buildroot系列开发(四)Linux工具链剖析
116 0
Buildroot系列开发(四)Linux工具链剖析(上)
|
程序员 Linux
程序员之路:Linux目录处理命令
程序员之路:Linux目录处理命令
|
开发工具 Android开发 开发者
鸿蒙、OpenHarmony、HarmonyOS傻傻的分不清楚。。。看这篇就够了
很多人对鸿蒙、OpenHarmony、HarmonyOS这些术语傻傻的分不清楚,那么本文就做一些解答。 6月4日,华为发布了《关于规范HarmonyOS沟通口径的通知》(以下简称《通知》),原文在网上都能搜到,这里就不贴了。本人对该通知做一些解读如下。
770 0