静态库
静态库 | 静态库 |
优点 | 运行速度快 |
缺点 | 占用系统资源比较多 |
使用的场合 | 对时间要求很高的场合 |
静态库的制作:
1、把所有的源程序(.c文件)制作成目标文件(.o 文件)
gcc -c mul.c -o mul.o
gcc -c sub.c -o sub.o
gcc -c add.c -o add.o
2、使用工具将所有 .o 打包生成静态库文件(静态库的后缀名是 .a )
ar rcs lib库名.a mul.o sub.o add.o
3、编译的时候 gcc 库包含的相关命令
-L | 库文件所在的目录 |
-l(L的小写) | 包含要添加到程序中的库,后面跟库名即可 |
-I(i的大写) | 指定头文件所在路径 |
例如:gcc 2.c -L/home -lmylib -I…/
动态库制作
1、将要作为动态库的文件做成目标文件文件(.o)
注意和生成普通目标文件的区别
gcc -c xxx.c -o xxx.o -fPIC
2、将目标文件编译成动态库,后缀名是 .so
gcc -shared -o lib库名.so xxx.o
3、编译的时候需要把动态库加上
gcc src/main.c -L./lib -lmylib -o bin/a.out
4、运行时候会找不到动态库文件,解决办法:
1、临时办法,只在当前终端有效,终端重启以后就没用了
在终端输入以下命令:
export LD_LIBRARY_PATH=库所在目录的绝对路径
2、修改终端的配置文件 ~/.bashrc
- vim ~/.bashrc
- 把 export LD_LIBRARY_PATH=库所在目录的绝对路径 添加到文件的最后一行
- 重启终端或者运行命令 source ~/.bashrc 使用配置文件生效
3、将动态库放到系统默认目录下 ===> /usr/lib
4、配置文件 /etc/ld.so.conf
- vim /etc/ld.so.conf
- 将库文件的绝对路径添加到库的最后一行
- 使配置文件生效:ldconfig -v
查看可执行使用了哪些动态库的命令:ldd 可执行文件
动态库和静态库在同一个目录下,默认包含的是动态库