库文件是用来保存函数和变量的仓库,用户只能使用库文件里的函数或者变量,但是并没有办法看到这些函数是如何实现的。
在linux系统中,库文件有两个存放位置,一种是系统启动和运行需要的库,放在/lib目录中,另一种是应用程序启动或运行需要加载的库,放在usr/lib中。
库分为两种,静态库和动态库。两者名字都在前面加lib,静态库以.a为后缀,在程序编译时加载。动态库以.so为后缀,在程序运行时加载。
两者的主要区别在于:
1.升级的难易程度不同,使用动态库的程序直接替换库文件,易于升级;使用动态库的程序要重新编译,难以升级;
2.静态库生成的可执行文件大,占用内存多;动态库生产的可执行文件小,占用内存少;
3.使用动态库编译的程序运行编译速度快于静态库,反之,使用静态库的程序编译速度较慢;
4.使用动态库编译的程序运行时间慢于静态库;
5.使用动态库难以部署,使用静态库更容易部署;
linux环境下如何创建库:
创建动态库:
gcc -c -o add.o add.c
gcc -shared -fpic -o libadd.so add.c
创建静态库:
gcc -c add.c add.o
ar rcs libadd.a add.c
如何使用库:
两种库使用方法相同,通过-I(小写L)指定库名(如 -ladd 使用名为libadd.a的库),-L指定库文件目录(默认只到/lib和/usr/lib寻找)
gcc -o main -ladd -L. main.c
如何存在同名的静态库和动态库,优先使用动态库。