动静态库本质上是可执行程序的“半成品”
代码编译分为四个阶段
我们将一群.o文件打包就变成了库 (.so/ .a)。所以库的本质是一堆.o的集合,不包含main,但是包含了大量的方法
静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。相当于将库的代码拷贝到你的代码里面,使你的可执行文件变大。
动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。
在Linux下 .so为动态库,.a为静态库
在Windows下, .dll为动态库,.lib为静态库
libc.so.6 ,lib和.so之间的就是库名,所以该库是c动态库
首先都要生成.o文件
生成.a .so 文件
打包(.h文件和库文件(.a/.so))
使用动静态库
编译
_I 后面接头文件目录, -L后面接库路径, -l后面接具体哪个库
运行可执行程序
静态链接的可执行程序能直接运行,动态链接的不行,因为操作系统找不到动态库
需要导入环境变量 export LD_LIBRARY_PATH= LD_LIBRARY_PATH:“.so文件的路径”
rt LD_LIBRARY_PATH= LD_LIBRARY_PATH:“.so文件的路径”