上QQ阅读APP看书,第一时间看更新
2.2 从源代码构建软件
在正式开始验证之前,我们需要在Linux中安装编译工具。
# yum install gcc rpm-build rpm-devel rpmlint make python bash coreutils diffutils
接下来,我们分别介绍本机编译和解释编译。
2.2.1 本机编译代码
在编程语言中,C语言是本机编译。我们查看一个源代码文件,如下所示:
# cat cello.c #include <stdio.h> int main(void) { printf("Hello World, I'm DavidWei!\n"); return 0; }
调用C编译器gcc进行编译:
# gcc -o cello cello.c
编译成功后,我们可以执行结果输出。
# ./cello Hello World, I'm DavidWei!
为了实现自动化构建代码,我们添加Makefile,这是大型软件开发中常用的方法。
首先创建一个Makefile,如下所示:
# cat Makefile cello: gcc -o cello cello.c clean: rm cello
接下来,通过make来完成编译。执行make会自动编译源代码,然后可以成功执行,如图2-1所示。
图2-1 编译并运行代码
执行make clean会删除编译结果,如图2-2所示。
图2-2 删除编译结果
在介绍了本机编译后,我们介绍解释编译。
2.2.2 解释型代码
对于用解释型编程语言编写的软件,如果是Byte Compiled语言,如Python,就需要一个编译步骤,把源代码构建成Python的语言解释器(称为CPython)的可执行文件。
我们查看一个Python的源代码,如下所示。
# cat pello.py #!/usr/bin/env python print("Hello World, I'm DavidWei!")
对源代码进行编译:
# python -m compileall pello.py Compiling pello.py ...
编译成功后运行:
# python pello.pyc Hello World, I'm DavidWei!
我们看到,对源.py文件进行字节编译后会生成一个.pyc文件,这是Python 2.7字节编译的文件类型,这个文件可以使用Python语言虚拟机运行。
查看文件类型:
# file pello.pyc pello.pyc: python 2.7 byte-compiled
和Python相对应,无须编译的解释性代码是Raw Interpreted,如我们日常使用的bash shell。
我们看一个shell文件,如下所示。
# cat bello #!/bin/bash printf "Hello World, I'm DavidWei!\n"
对于Raw Interpreted源码,我们使文件可执行,然后直接运行即可,如图2-3所示。
图2-3 修改权限运行shell
在介绍了如何从源码构建软件包后,接下来我们介绍如何给软件打补丁。