21-. Linux Source Code and Tarball

21-. Linux 原始码 与 Tarball

开放源码、编译程序 与 可执行文件

1. make进行宏编译

可以进行多文件编译的神指令。

1.1. makefile 规则文件

创建 makefile 规则文件

main: main.o haha.o sin_value.o cos_value.o 
    gcc -o main main.o haha.o sin_value.o cos_value.o -lm 
# 注意:第二行的 gcc 之前是 <tab> 按键产生的空格喔!

1.2. make

编译相关文件

2. Tarball 管理 与 建议

C 语言是具有强跨平台编译能力的。在 Linux 底下写的代码在 Windows 也是可以编译的。

原始码其实大多是纯文本档,需要透过编译程序的编译动作后,才能够制作出 Linux 系统能够认识的可执 行的 binary file ;

通过原始码 可以实现跨平台编译

3. 函式库管理

动态库管理、静态库管理

3.1. 静态库管理

  • 扩展名:(扩展名为 .a)

这类的函式库通常扩展名为 libxxx.a 的类型;

  • 编译行为:

这类函式库在编译的时候会直接整合到执行程序当中,所以利用静态函式库编译成的文件会比较大一些喔;

  • 独立执行的状态:

这类函式库最大的优点,就是编译成功的可执行文件可以独立执行,而不需要再向外部要求读取函式库的 内容 (请参照动态函式库的说明)。

  • 升级难易度:

虽然执行档可以独立执行,但因为函式库是直接整合到执行档中, 因此若函式库升级时,整个执行档必须 要重新编译才能将新版的函式库整合到程序当中。 也就是说,在升级方面,只要函式库升级了,所有将此 函式库纳入的程序都需要重新编译!

3.2. 动态库管理

  • 扩展名:(扩展名为 .so)

这类函式库通常扩展名为 libxxx.so 的类型;

  • 编译行为:

动态函式库与静态函式库的编译行为差异挺大的。 与静态函式库被整个捉到程序中不同的,动态函式库在 编译的时候,在程序里面只有一个『指向 (Pointer)』的位置而已。也就是说,动态函式库的内容并没有被 整合到执行档当中,而是当执行档要使用到函式库的机制时, 程序才会去读取函式库来使用。由于执行文 件当中仅具有指向动态函式库所在的指标而已, 并不包含函式库的内容,所以他的文件会比较小一点。

  • 独立执行的状态:

这类型的函式库所编译出来的程序不能被独立执行, 因为当我们使用到函式库的机制时,程序才会去读取 函式库,所以函式库文件『必须要存在』才行,而且,函式库的『所在目录也不能改变』,因为我们的可执 行文件里面仅有『指标』亦即当要取用该动态函式库时, 程序会主动去某个路径下读取,呵呵!所以动态 函式库可不能随意移动或删除,会影响很多相依的程序软件喔!

  • 升级难易度:

虽然这类型的执行档无法独立运作,然而由于是具有指向的功能, 所以,当函式库升级后,执行档根本不 需要进行重新编译的行为,因为执行档会直接指向新的函式库文件 (前提是函式库新旧版本的档名相同喔!)。

Last updated