静态库:静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。
静态库在程序的链接阶段被复制到了程序中,和程序运行的时候没有关系。静态库的优点是执行速度快;缺点是占用空间大,被多次使用就会有多份冗余拷贝。当静态库中的内容发生变化时,需要重新编译出新的程序,因此不能轻易修改库中的内容。
静态库文件以.a结尾,在Linux系统下需以lib开头。
接下来我们以创建一个libmath.a为例讲解如何创建一个静态库和调用静态库。
1、创建静态库
编译源代码:gcc -c add.c sub.c 生成目标文件 add.o sub.o
打包生成静态库:ar -r libmath.a add.o sub.o
ar命令的一些参数:
-r 把目标文件添加到静态库中,已经存在的更新
-q 将目标文件追加到静态库的末尾
-d 从静态库中删除目标文件
-t 显示静态库中有哪些目标文件
-x 把静态库拆分成目标文件
2、调用静态库
可以直接调用静态库,但调用者要和库在同一路径下
gcc main.c libmath.a
也可以通过设置环境变量,步骤如下:
1.打开文件:vim ~/.bashrc
2.在文件末尾添加一行:export LIBRARY_PATH=$LIBRARY_PATH:库文件的路径(如果需要删除环境变量,需要在~/.bashrc中删除环境变量后,关掉终端,重新启动终端才能生效)
3.重新加载配置文件:source ~/.bashrc
4.编译时要指定库名:gcc main.c -lmath(-l 的意思是链接里加库,这里的math意为libmath.a去掉lib和.a)。
也可以在编译的时候设置编译参数:-L库的路径
gcc main.c -L路径 -lmath