1)命名规则
lib 名字 +.so
2)制作步骤
1、生成与位置无关的代码(生成与位置无关的.o)
gcc -fPIC -c *.c -o *.o -I ../include
-I 指定头文件路径
2、把.o打包共享库(动态库)
gcc -shared -o libMycalc.so *.o -I include
3)使用方法
第一种使用方法
gcc main.c lib/libMylib.so -o app -I include
第二种使用方法
gcc main -I include -L lib -l Mylib -o myapp
4)解决程序执行过程时动态库无法加载的问题:
1、放到系统的库目录中--不允许使用
2、临时测试(存放动态库的环境变量:LD_LIBRARY_PATH,将动态库的路径设置给变量)
将设置的值,导入到环境变量中:export LD_LIBRARY_PATH
当终端关闭,设置会失效
3、不常用的方法(永久设置):
在家目录.bashrc文件 中添加一句画:export LD_LIBRARY_PATH=动态库目录的绝对路径
原因:在开启终端的时候,会读取.bashrc的配置文件
.bashrc修改完成,需要重启终端
4、
1.需要找动态连接器的配置文件
sudo vim /etc/ld.so.conf
2.动态库的路径写道配置文件中
/home/myprojiect/lib
3.更新 -- sudo ldconfig -v(信息的输出)
命令
ldd + 可执行程序
显示所有可以依赖的库
5)优点
1、执行程序体积小
2、动态库更新了,不需要重新编译程序。
1》函数接口不变
缺点:
1、发布程序的时候,需要将动态库提供给用户
2、动态库没有被打包到应用程序中,加载速度相对较慢
6)总结
动态库在打包可执行程序的时候不会将动态库打包到可执行程序中,只会做一个标记,也就是需要调用哪些函数,在执行的时候需要先加载动态库,然后在调用动态库里面的函数然后执行相应的操作。