linux下的源码编译

源码编译

把这篇参考文章linux下源代码的编译安装入门完整看并动手实践下来,对源码编译就有了宏观上粗略的了解。

另外还需要了解多级目录下makefile的编写及编译过程。

三步走

configure - 检查

1
2
3
4
configure --prefix=dir/
# 指定安装目录dir/,后续make install时会安装到dir/目录下(不指定的话,默认是/usr/local/bin目录)
# 安装的二进制文件存放在dir/bin/目录下
# 安装的资源文件存放在dir/share/目录下
1
2
configure --help
# 查看详细的帮助说明,如--sys-config=xxx进行参数设定,--with/--enable/--without/--disable等对编译过程进行控制

make - 编译

除了有些用perl或python编写的软件(使用perl或python进行编译),大部分源代码都是需要通过make进行编译的

make是linux开发套件里面自动化编译的一个控制程序,它通过makefile里的编译规则自动调用gcc,ld等进行编译。makefile可以自行编写,也可以通过configure脚本根据给定的参数和系统环境生成。

make install - 安装

make通过加’参数’make installmake uninstall来进行安装或卸载,若不加’参数’则表示进行默认的源代码编译

默认情况下,通常需要root权限来运行make install,因为待写入目录可能权限较高(如/usr/local/bin)。

对部分软件而言,需要在make install前先运行make checkmake test来进行一些测试。

编译qemu

下载qemu源码

1
2
3
4
5
wget https://download.qemu.org/qemu-5.2.0.tar.xz
tar Jxvf qemu-5.2.0.tar.xz
cd qemu-5.2.0
cd ..
mkdir -p build-qemu

安装ninja

1
2
3
4
5
sudo apt install re2c
git clone git://github.com/ninja-build/ninja.git && cd ninja
./configure.py --bootstrap
cp ninja /usr/bin/
ninja --version

编译qemu

1
2
3
4
sudo apt install pkg-config libglib2.0-dev libmount-dev python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential autoconf automake libfreetype6-dev libtheora-dev libtool libvorbis-dev pkg-config texinfo zlib1g-dev unzip cmake yasm libx264-dev libmp3lame-dev libopus-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev 
cd build-qemu/
../qemu/configure --enable-debug
make -j4

离线编译安装gcc-5.4.0

1、下载gcc版本:gcc网址

2、解压到本地,新建build目录,执行configure。此时会报错,因为依赖条件不满足,从报错中获取GMP,MPFR和MPC的版本,然后分别安装。

1
2
3
4
5
tar zxvf gcc-5.4.0.tar.gz
cd gcc-5.4.0
mkdir build
cd build
../configure

报错信息:

1
configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.

3、安装依赖

http://ftp.gnu.org/gnu/,该目录下有GMP,MPFR和MPC目录,分别进入下载需要的版本。(按顺序安装哦)

3.1 安装GMP

1
2
3
4
5
6
7
$ tar -jxvf gmp-4.3.2.tar.gz
$ cd gmp-4.3.2
$ mkdir temp
$ cd temp
$ ../configure --prefix=/usr/local/gmp-4.3.2
$ make
$ make install

3.2 安装MPFR

1
2
3
4
5
6
7
8
$ tar -zxvf mpfr-3.0.0.tar.gz 
$ cd mpfr-3.0.0
$ mkdir temp
$ cd temp

$ ../configure --prefix=/usr/local/mpfr-3.0.0 --with-gmp=/usr/local/gmp-4.3.2
$ make
$ make install

3.3 安装MPC

1
2
3
4
5
6
7
8
$ tar -zxvf mpc-1.0.2.tar.gz
$ cd mpc-1.0.2
$ mkdir temp
$ cd temp

$ ../configure --prefix=/usr/local/mpc-1.0.2 --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-3.0.0
$ make
$ make install

3.4 添加库路径到/etc/ld.so.conf中

1
2
3
4
5
6
7
vim /etc/ld.so.conf
#添加如下内容:
/usr/local/gmp-4.3.2/lib
/usr/local/mpfr-3.0.0/lib
/usr/local/mpc-1.0.2/lib
#添加完后执行:
ldconfig

4 安装gcc

第2步中已经解压完毕,进入build目录

1
2
3
4
../configure --prefix=/usr/local/gcc-5.4.0 --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-3.0.0 --with-mpc=/usr/local/mpc-1.0.2 

make
make install