.
扩展名
(
扩展名为
.a)
这类的函式库通常扩展名为
libxxx.a
的类型;
.
编译行为
这类函式库在编译的时候会直½整合到执行程序当中,所以
利用静态函式库编译成的文件会比½大一些喔
.
独立执行的状态
这类函式库最大的优点,就是编译成功的可执行文件
可以独立执行
,而不需要再向外部要求读取函式库的
内容
(
请参照动态函式库的说明
)
.
升级难易度
虽然执行档可以独立执行,但因为函式库是直½整合到执行档中,
因此若函式库升级时,整个执行档必须
要重新编译才能½新版的函式库整合到程序当中。
也就是说,在升级方面,只要函式库升级了,所有½此
函式库纳入的程序都需要重新编译!
.
动态函式库的特色:
.
扩展名
(
扩展名为
.so)
这类函式库通常扩展名为
libxxx.so
的类型;
.
编译行为
动态函式库与静态函式库的编译行为差异挺大的。
与静态函式库被整个捉到程序中不同的,动态函式库在
编译的时候,在程序里面只有一个『
指向
(Pointer)
』的位置而已。也就是说,动态函式库的内容并没有被
整合到执行档当中,而是当执行档要使用到函式库的机制时,
程序才会去读取函式库来使用。由于执行文
件当中½具有指向动态函式库所在的指标而已,
并不包含函式库的内容,所以
他的文件会比½小一点
.
独立执行的状态
这类型的函式库所编译出来的程序
不能被独立执行
因为当我们使用到函式库的机制时,程序才会去读取
函式库,所以函式库文件『
必须要存在
』才行,而且,函式库的『
所在目录也不能改变
』,因为我们的可执
行文件里面½有『指标』亦即当要取用该动态函式库时,
程序会主动去某个路径下读取,呵呵!所以动态
函式库可不能随意移动或删除,会影响很多相依的程序软件喔!
.
升级难易度
虽然这类型的执行档无法独立运作,然而由于是具有指向的功能,
所以,当函式库升级后,执行档根本不
需要½行重新编译的行为,因为执行档会直½指向新的函式库文件
(
前提是函式库新旧版本的档名相同喔!
)
目前的
Linux distribution
比½倾向于使用动态函式库,因为如同上面提到的最重要的一点,
就是函
式库的升级方便!由于
Linux
系统里面的软件相依性太复杂了,如果使用太多的静态函式库,那么
升级某一个函式库时,
都会对整个系统造成很大的冲击!因为其他相依的执行档也要同时重新编译
啊!
这个时候动态函式库可就有用多了,因为只要动态函式库升级就好,其他的软件根本无须变动。
那么这些函式库放置在哪里呢?绝大多数的函式库都放置在:
/lib64, /lib
目录下!
此外,
Linux
系统
里面很多的函式库其实
kernel
就提供了,那么
kernel
的函式库放在哪里?呵呵!就是
/lib/modules
里面啦!里面的数据可多着呢!不过要注意的是,
不同版本的核心提供的函式库差异
性是挺大的,所以
kernel 2.4.xx
版本的系统不要想½核心换成
2.6.xx
喔!
很容易由于函式库的不
同而导致很多原本可以执行的软件无法顺利运作呢