静态库
要被包含到源程序中的库
优点 运行速度快
缺点 占用系统资源比较多
使用的场合 对时间要求很高的场合
静态库的制作:
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 可执行文件
动态库和静态库在同一个目录下,默认包含的是动态库