1.共享库的命名规则
\qquad共享库,即动态库。库名: lib+库名+.so
2.共享库的制作
2.1生成与位置无关的.o文件
gcc -fpic -c filename.c -I 头文件路径
2.2生成共享库
gcc -shared -o 共享库名 要打包的.o文件 -I 头文件路径
2.3生成可执行文件
gcc filename.c 动态库路径/库名 -o 可执行文件名 -I 头文件路径
3.动态库无法被加载
\qquad查看可执行文件动态库加载情况
ldd 可执行文件
\qquad 需要找动态连接器的配置文件 ld.so.conf
sudo vim /etc/ld.so.conf
\qquad 动态库的绝对路径写到配置文件中
\qquad 更新——sudo ldconfig
4.动态库实例
- 目录结构
zhaoxr@zhaoxr-ThinkPad-E450:~/linux$ tree
.
├── head
│ ├── add.h
│ └── mul.h
├── lib
│ ├── add.c
│ └── mul.c
└── source└── main.c3 directories, 5 files
- 制作动态库
生成与位置无关的.o文件
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ gcc -fpic -c mul.c add.c -I ../head/
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ tree
.
├── add.c
├── add.o
├── mul.c
└── mul.o0 directories, 4 files
生成动态库
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ gcc -shared -o libmylib.so mul.o add.o -I ../head/
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ tree
.
├── add.c
├── add.o
├── libmylib.so
├── mul.c
└── mul.o0 directories, 5 files
- 生成可执行文件
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/source$ gcc main.c ../lib/libmylib.so -o app -I ../head/
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/source$ tree
.
├── app
└── main.c0 directories, 2 files
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/source$ ./app
a+b=19,a*b=90
5. 动态库的优缺点
\qquad优点:执行程序的体积小;动态库更新了,不需要重新编译程序。
\qquad缺点:发布程序时,需要把动态库提供给用户;动态库没有加载到应用程序中,所以加载速度会比静态库慢一些。