共享库的制作:
命名规则:
1 | lib+名字+.so |
制作步骤:
1).生成与位置无关的代码(生成与位置无关的.o)
1 | gcc -fPIC -c *.c |
2).将.o打包成共享库(动态库)
1 | gcc -shared -o libMylib.so *.o |
共享库是程序运行的时候才加载的
发布和使用共享库(动态库)
1)头文件
2)库文件
使用:
1 | gcc main.c 库的目录和名字 -o main |
解决程序执行时动态库无法被加载的问题
1)将库文件放到/lib目录里(不建议使用)
2)临时设置终端环境变量
环境变量:LD_LIBRARY_PATH=将动态库的路径设置给该变量
将设置的值,导入到环境变量中:
1 | export LD_LIBRARY_PATH=目录 |
终端关闭失效
3).设置家目录.bashrc配置文件
在.bashrc文件最后一行添加
1 | export LD_LIBRARY_PATH=目录(绝对路径) |
每次启动bash时都会自动执行这条命令
终端重启生效
4).配置ld.so.conf文件
1.需要找动态链接器的配置文件
1 | /etc/ld.so.conf |
2.动态库的路径写到配置文件
3.更新
1 | sudo ldconfig -v |
动态库的优缺点:
优点:
1)执行程序体积小
2)动态库更新了,不需要重新编译程序,前提是函数接口不变
缺点:
发布程序的时候,需要将动态库提供给用户
动态库没有被打包到应用程序中,加载速度相对较慢