源码与tarball软件安装

1 编译 what?

1.1 为什么要编译

linux 上真正识别的可执行文件其实是二进制文件,我们如何知道一个文件是不是二进制文件呢?使用file
file /bin/bash
那么我们如何做出二进制程序: 首先使用文本处理器写程序,如vim,写完的程序就是所谓的源代码。完成这个源码文件的编写之后,再将这个文件“编译“成为操作系统能看懂的二进制程序。编译的过程中会产生目标文件(Object file),这些文件是以“.o”的扩展名形式存在。编译程序GCC

1.2 什么是make与configure

通常软件开发商都会写一个检测程序来检测用户的操作环境,以及操作环境是否有软件开发商所需要的其他功能,该检测程序检查完毕后就会主动新建这个Makefile文件。这个检测程序的文件名为configure 或者是config。一般来说,检测程序会检测的数据大约有以下:

  • 是否有适合的编译程序可以编译本软件的程序代码;
  • 是否已经存在本软件所需要的函数库或其他需要的相关软件;
  • 操作系统平台是否适合本软件,包括Linux的内核版本;
  • 内核的头定义文件(header include)是否存在(驱动程序必须要的检测)。

当执行make的时候,make会在当前目录下搜索Makefile(or makefile)这个文本文件,而Makefile里面则记录了源码如何编译的详细信息。make会自动判断源码是否经过变动了而自动更新执行文件。

所以同一套软件在不同的平台上执行时,必须要重复编译,因此才需要源码!

1.3 Tarball 的安装基本流程:

  1. 下载
  2. 解压缩
  3. gcc编译生成目标文件
  4. 以GCC进行函数库、主程序、子程序的链接,以形成主要的二进制文件
  5. 将上述的二进制文件以及相关的配置文件安装至自己的主机上面。

2 gcc编译

2.1 主程序、子程序的链接以及调用外部函数库

使用文本处理器编写源码后,使用gcc编译,输出目标文件。还可以链接主程序和子程序,当源码中使用了外部函数库功能时,需要在编译与链接的时候讲这个函数库链接进执行文件里面。默认的状态下,没有任何参数,执行文件的文件名会自动设置为a.out这个文件名。下面是一些常用的参数

gcc -O -c -Wall hello.c 

*  -c  编译输出hello.o
*  -O 为生成更优化的参数
*  -Wall 为产生更详细的编译过程信息,可以不用理会

gcc -o hello hello.o

*  -o 利用hello.o这个目标文件制作出一个名为hello的执行文件

gcc sin.c -lm -L/lib -L/usr/lib -I/usr/include

*  -l 加入某个函数库(library)的意思
* m则是libm.so这个函数库
*  -L表示我要的函数库libm.so请到/lib或者/usr/lib里面搜索,用法 -L/PATH
*  -I/path 路径为设置要去搜索相关的include文件的目录。默认在/usr/include下面。

2.2 用make进行宏编译

make的功能就是简化所有的编译过程里面的执行命令。编辑Makefile这个规则文件,Makefile的语法为:

目标(target):target1 target2
   gcc -o 欲新建的可执行文件 target1 target2
  • 命令行必须要以tab按键作为开头才行;
  • target与相关文件之间需“:”隔开;
  • 在Makefile中的"#"代表批注。

还可以通过shell“变量”来简化Makefile,变量的基本语法为:

LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: ${OBJS}
    gcc -o main ${OBJS} ${LIBS}
clean:
    rm -f main ${OBJS}
  • 变量与变量内容之间用“=”隔开,可以有空格;
  • 变量左边不可以有tab键
  • 变量与变量内容不能有“:”
  • 在习惯上变量最好是大写字母
  • 运用变量时,以(变量);
  • 在该shell的环境变量的的是可以被套用的;
    *在命令行模式也可以定义变量。

环境变量的取用规则是:

  1. make 命令行后面加上的环境变量为第一优先;
  2. Makefile里面指定的环境变量第二优先;
  3. shell原本具有的环境变量第三优先。

3 Tarball 管理

3.1 所需要的基础软件

  • gcc or cc等compiler
  • make
  • autoconfig相关软件,如autoconf, automake
  • 需要kernel提供的library以及相关的include文件

3.2 tarball安装的基本步骤

1. ./configure
这个步骤是建立Makefile文件.用来检查Linux系统和相关软件是否符合软件安装的要求,如果目录下没有configure文件,使用autoconf相关软件来创建,然后再使用./configure编译
2. makeclean
make会读取Makefile中关于clean的工作。这个步骤不一定有,但是希望执行一下,可以清楚上次编译过的目标文件(.o),这样我们就能确定新编译出来的执行文件是使用我们自己的机器编译完成的。
3. make
make根据Makefile中的默认工作进行编译行为。编译的工作主要是将源码编译为可被执行的目标文件,但是这些目标文件通常还需要一些函数库之类的链接后,才能生成一个完整的可执行文件。这个可执行文件会放置在目前所在的目录下。
4. make install
make会根据Makefile里面关于install的选项,将上一个步骤所编译完成的数据安装到默认的目录中,完成安装。

3.3 gcc和其他必要软件的安装

下面两种方法都可以直接安装GCC

sudo apt-get install build-essential
sudo apt-get build-depgcc
sudo apt-get autoconf
sudo apt-get automake
sudo apt-get yaggo
sudo apt-get libtools

我之前曾下载GCC包来安装,但是对于没有GCC的系统适用,因为编译过程需要gcc,下载GCC适用于更新软件。

关于软件删除、升级、更新源码等内容,下次继续更新

参考资料:

1.《鸟哥私房菜》第22章 软件安装:源码与Tarball

  1. gcc, autoconf 等官网

  2. Stack Overflow, CSDN等博客网站

欢迎大家一起讨论软件安装的心路历程,如果有什么问题,欢迎大佬们指正。
我是新手:夏夏

你可能感兴趣的:(源码与tarball软件安装)