1.库文件就是用来保存函数和变量的长裤,只能使用库文件里的函数或者变量,但是无法看到它的源码即无法实现,如我们C语言中的pritf scanf strcpy等函数。
2Linux下的库文件分为两种:
静态库 .a在编译时加载
动态库 .so在启动时加载
编译器优先加载动态库
他们的存放位置在根目录下的lib文件夹下与根目录下/usr/lib目录下
其中:根目录下lib存放的是系统运行时需要加载的库文件。而用户下lib目录就是存放应用程序启动或者运行需要加载的库文件
我们可以自己制作静态库
1.先将.c文件生成.o 文件 gcc -c xxx.c
2使用ar命令 加rcs (不存在就创建,存在就更新)
如 ar rcs libadd.a add.o
就生成了一个静态库文件add.a 其中lib是文件前缀名。
C语言当中自带库叫C库,c.so,c.a 在安装了gcc之后就具有的 其中printf scanf等等函数就在其中。在我们编译过程中自动连接这些库
gcc中可以使用-l选项去连接系统下的库。其中是先在usr目录下的lib目录去找,在去根目录下的lib目录下去找。
其中-L选项可以指定第三方链接库的路径
动态库的制作
gcc -shared -fPIC add.c -o libadd.so
使用动态库
gcc main.c ./libadd.so
在我们使用动态库时,需要写动态库的路径。
两种库文件的区别
1升级的难易:
在我们升级应用程序时,动态库我们只需要直接替换库文件即可。
而静态库需要先重新生成新的库,再重新进行编译。
2生成的可执行文件大小
使用静态库生成的可执行文件比动态库链接大,因为它需要把所有库文件放在一起进行编译
3编译时长
显然动态库快
4运行时长
动态库在运行时加载进来,所有动态库运行时间慢与静态库
5使用动态库难以部署,静态库易于部署
最后gcc 提供-static选项:
用于编译一个程序时,会使此程序静态编译,(把动态库函数和所依赖的任何的东西都编译进程序)
编译之后,文件会非常大,但是运行时不需要依赖任何动态库。