21-. Linux Source Code and Tarball
21-. Linux 原始码 与 Tarball
开放源码、编译程序 与 可执行文件
1. make
进行宏编译
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