by pascal4123
从代码角度看,程序中所包含的每一个头文件都可能代表一个必须链接的库。
如果函数库的一份拷贝是可执行文件的物理组成部分,那么我们称之为静态链接;
如果可执行文件只是包含了文件名,让载入器在运行时能够找到程序所需要的函数库,我们称之为动态链接。
即使是静态链接中,也不是整个静态库文件整个装入可执行文件,而是其中所需要的函数。
动态链接是一种更现代的方法。
虽然运行速度稍慢一些,但动态链接能够更有效地利用磁盘空间,而且链接编译的时间缩短。
更重要的是动态链接把程序和用到的特定的函数库分离开了,使得函数库的版本升级更为容易。
与之形成对比的是,使用哪个静态链接的最大危险是将来版本的操作系统可能与可执行文件邦定的函数库不兼容,这会导致系统崩溃或其他严重后果。
任何人都可以创建动态库和静态函数库,只需要编译一些不包含main函数的代码。并把编译生成的.o文件用合适的工具处理。对静态库,用
ar;对动态库,用
ld。
可以用工具
nm列出函数库中包含的符号列表,例如 nm libndl.so | grep "xdl_mapname"
静态库被称为archive,他们通过ar来创建和更新。
静态库文件约定后缀是.a
动态库文件后缀是.so(可能在文件名中加入版本号)。
阅读(513) | 评论(0) | 转发(0) |