gcc/g++ 链接库的编译与链接
http://blog.csdn.net/surgewong
在widows平台下,静态链接库是.lib文件,动态库文件是.dll文件。在linux平台下,静态链接库是.a文件,动态链接库是.so文件。这里主要讲在linux平台下的动态库和静态库的生成以及链接。本文主要参考【1】【2】【3】【4】
一、库的基本知识
首先说明要对库有一个比较直观的理解。库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上说来库是一种可执行代码的二进制形式(注,其本身不可执行),可以被操作系统载入内存执行。
静态链接库,之所以称为“静态库”,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中,因此对应的链接方式为静态链接。其实一个静态链接库可以简单看成一组目标文件(.o/.obj文件)的集合,即很多目标文件经过压缩打包后形成的一个文件。静态库特点总结:
1. 静态库对函数库的链接是放在编译时期完成
2. 程序在运行时对函数库再唔瓜葛,一直方便。
3. 浪费空间和资源,因为所有相关的目标文件和牵涉到的函数库被链接合成一个可执行文件。