共享库(动态库)

共享库的制作:

命名规则:

1
lib+名字+.so

制作步骤:

1).生成与位置无关的代码(生成与位置无关的.o)

1
gcc -fPIC -c *.c

2).将.o打包成共享库(动态库)

1
gcc -shared -o libMylib.so *.o

共享库是程序运行的时候才加载的

发布和使用共享库(动态库)

1)头文件

2)库文件

使用:

1
2
gcc main.c 库的目录和名字 -o main
gcc main.c ./libMylib.so -o main

解决程序执行时动态库无法被加载的问题

1)将库文件放到/lib目录里(不建议使用)

2)临时设置终端环境变量

​ 环境变量:LD_LIBRARY_PATH=将动态库的路径设置给该变量
​ 将设置的值,导入到环境变量中:

1
2
export LD_LIBRARY_PATH=目录
export LD_LIBRARY_PATH=./lib

终端关闭失效

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)动态库更新了,不需要重新编译程序,前提是函数接口不变

缺点:

​ 发布程序的时候,需要将动态库提供给用户
​ 动态库没有被打包到应用程序中,加载速度相对较慢