linux中lib开头文件作用

lib文件
一般来说,库文件有两种:动态库和静态库。
1.动态库
动态库(也叫共用库)是编译好的代码片段,在程序执行时由运行时连接文件(runtime linker)/lib/ld.so加载。这有点类似于windows下的dll文件。在提高效率方面,这样做可以节省系统在以下方面的开销:
硬件设备:不同的程序可以共享相同的代码。
内存:内核可以将库文件的拷贝存放在内存里以便进程之间共享。
时间:只要你不再重新编译库文件,重新生成可执行文件只需处理更少的代码。
习惯上,动态库以字符串so命名,后面加上版本号。例如:
libc.so.6 C语言的库文件.千万别给删掉了:)
libcrypt.so.1 影子口令系统的编码库.
libncurses.so.4.2 The new curses library routines.

2.静态库
静态库在编译的时候被固定在了可执行文件中,而不是放在系统的某个地方由ld.so加载。这种做法好的一面是可执行文件自己包含了所需的所有库文件,并不依赖于系统中的其他代码,也不会出现库文件缺失的情况。你可以把这些代码复制给任何人,而它们保证可以工作。不好的一面就是可执行文件不必要的增大了,而且不同的程序之间不能共享代码。
习惯上,我们以后缀.a来标记静态库文件。例如:
libgtk.a GIMP和其他X应用的图形库.
libcrypt.a 影子口令系统的编码库.
libvga.a. [S]VGA图形库.

3.静态库与动态库的对比
使用静态库的程序要比使用动态库的程序稍微快一些。我曾见过有人说两者之间启动时间的相差5%的数量级。但是,别忘了,动态库的好处之一是建立在一种假定条件下,即这些可执行代码已经被加载到了内存中.事实上,对于像libc这样的库文件,确实是一直保存在内存中的。如果你要运行一个使用静态库编译的 netscape,必然要多等上一点时间。因此,对于“哪种库文件更快”这个问题的答案应该是“看情况而定”。但是一般来说,用动态库编译的的程序要更快一些,因为大部分情况下你所需要的库都已经加载到内存中了。
4.重要的文件/可执行文件
这个程序/lib/ls.so负责为可执行文件连接动态库。它在下面的文件夹里搜索库文件:
环境变量LD_LIBRARY_PATH中列出的目录,除非该程序设定了sid或者uid,以跳过环境变量。
文件/etc/ld.so.cache中列出的目录。
In /usr/lib
In /lib
至于为什么ld.so不去搜索/usr/local/lib,自有它的理由,我可以告诉你,但那会折磨死你。有些东西根本就不是要凡人知道的...
在/etc/ld.so.cache这个文件中包含了一个需要搜索的目录的汇总列表和一个备用库文件的列表。这个文件(/etc/ld.so.cache)是由/sbin/ldconfig创建的。
/sbin/ldconfig在系统启动时自动运行,也可在编译完成库文件后手动运行(每次安装软件之后都手动运行该文件是个不错的习惯)。 ldconfig生成/etc/ld.so.cache文件,它搜索/lib、/usr/lib以及其他在/etc/ld.so.conf中列出的需要搜索的目录。
在配置文件/etc/ld.so.conf中列出了所有ldconfig需要搜索以生成ld.so.cache文件的目录。如果你把库文件放在了不是默认的文件夹里(比如/home/lib),你应该把这个目录手工添加到ld.so.conf里,然后重新运行ldconfig

你可能感兴趣的:(windows,linux,dll,library,图形,linker)