Chinaunix首页 | 论坛 | 博客
  • 博客访问: 304356
  • 博文数量: 163
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-23 17:54
个人简介

做一个“好”人... 思想上会思考; 生活上有追求; 技术上不停步; 工作上有担当;

文章分类

全部博文(163)

文章存档

2016年(1)

2015年(143)

2014年(19)

我的朋友

分类: LINUX

2015-11-30 23:46:22

原文地址:再论动态库/静态库 作者:pascal4123

by pascal4123

从代码角度看,程序中所包含的每一个头文件都可能代表一个必须链接的库。

如果函数库的一份拷贝是可执行文件的物理组成部分,那么我们称之为静态链接;
如果可执行文件只是包含了文件名,让载入器在运行时能够找到程序所需要的函数库,我们称之为动态链接。
即使是静态链接中,也不是整个静态库文件整个装入可执行文件,而是其中所需要的函数。

动态链接是一种更现代的方法。
虽然运行速度稍慢一些,但动态链接能够更有效地利用磁盘空间,而且链接编译的时间缩短。
更重要的是动态链接把程序和用到的特定的函数库分离开了,使得函数库的版本升级更为容易。
与之形成对比的是,使用哪个静态链接的最大危险是将来版本的操作系统可能与可执行文件邦定的函数库不兼容,这会导致系统崩溃或其他严重后果。

任何人都可以创建动态库和静态函数库,只需要编译一些不包含main函数的代码。并把编译生成的.o文件用合适的工具处理。对静态库,用ar;对动态库,用ld
可以用工具nm列出函数库中包含的符号列表,例如 nm libndl.so | grep "xdl_mapname"

静态库被称为archive,他们通过ar来创建和更新。
静态库文件约定后缀是.a
动态库文件后缀是.so(可能在文件名中加入版本号)。

阅读(488) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~