什么是库文件
库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib 和 /usr/lib。 在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在 /usr/include 下或其子目录下。
库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为 libxxx.so,
静态库
如何写一个静态库
先写好函数 , 在头文件中放入声明 ,对函数文件进行编译成.o文件 用ar创建库
使用 ar 命令将第一步编译的所有”.o”文件生成静态库,其中 :
c 是创建库文件
r 是将方法添加的库中
v是显示过程
如何使用写的库文件
由于这个库文件是自己写的 , 不像系统会自动链接c库那样找到我们写的库文件 ,所以编译如下
L路径 , -l库名字
如果我们把库文件移到标准库下 ,就不需要加路径了
共享库
静态库和共享库的区别
静态库是在引用它的程序中装载一份它的方法 ,好处是如果原库文件出现问题也不影响写的程序 ,因为已经提前装载好了 ,缺点是所占空间太大 ,如果十个程序引用就要装载十份 , 太浪费内存空间 ,而且如果原库做了改动,引用的程序还是更新前的。 在此基础上就有了共享库 ,在程序编译的时候不进行装载 ,只进行一个标记,在运行程序时动态加载原库 , 这样一个磁盘上只要一份库文件就够了。
共享库的生成和使用
ldd main 查看main程序用到的共享库
生成共享库:
使用共享库不仅要在生成可执行程序时 在后面加上库路径和名字 ,在运行可执行程序时也要加上 路径和名字 ,或者移到标准库lib下就不用加。
以下是指定程序链接共享库的位置 ,用环境变量来改变。