一、.静态库的制作
1.命名规则
(1)lib + 库的名字 + .a
(2)libaytest.a
2.制作步骤
(1).生成对应的 .o 文件 *.c *.o -c
(2).将生成的 .o文件打包 ar rcs + 静态库的名字(libMytest.a) + 生成的所有的 .o
3.发布和使用静态库
(1).发布静态库
(2).头文件
eg:
gcc main.c -Iubclude -L lib -l MyCalc -o myapp
-Iubclude :头文件的位置
-L lib:静态库的位置
-l MyCalc:指定静态库。
静态库的优点:
1.发布程序的时候,不需要提供对应的库。
2.加载库的速度快。
缺点:
1.库被打包到应用程序中,导致库的体积很大。
2.库发生了改变。需要重新编译程序。
二、共享库的制作
1.命名规则
(1). lib + 名字 + .so
2.制作步骤
(1).生成与位置无光的代码。(生成与位置无关的 .o,因为是动态库,所以位置不定。)
eg: gcc -fPIC -c *.c -I../include
gcc -shared libMyCalc.so *.o -Iinclude
(2)将 .o 打包成共享库(动态库)
3.发布和使用共享库
4.解决程序执行时动态库无法被加载的问题。
(1)放到系统的库目录中---不允许使用
(2)临时测试
环境变量:LD_LIBRARY_PATH, 将动态库的路径设置给改变量。
将设置的值,导入到系统环境变量中:export LD_LIBRARY_PATH
关闭终端,设置会失效。
(3)不常使用的方法(永久设置):
在家目录的 .bashrc 文件 中加一句话: export LD_LIBRARY_PATH = 动态库目录的绝对路径。
.bashrc 修改完成,需要重启终端。
(4)
1.需要找动态连接器的配置文件 ------ /etc/ld.so.conf
2.动态库的路径写到配置文件中 ------- 绝对路径
3.更新 ---- sudo ldconfig -v
5.优缺点:
优点:
1.执行程序体积小
2.动态库更新了,不需要重新编译,函数的接口不变。
缺点:
1.发布程序的时候,需要将动态库提供给用户。
2.动态库没有被打包到应用程序中,加载速度相对较慢。
网友评论