静态库
静态库,所有的库包含在最终可执行文件中,占用空间大,运行速度快.
静态库一般以lib开头命名,以.a后缀结尾
静态库的制作
1. 把所有需要的.c源文件生成对应的.o文件(不包括main函数)
2. 使用工具将所有.o文件打包生成静态库
ar rcs lib库名.a mul.o add.o sub.o
3. 编译的时候添加静态库
gcc 1.c -o 1.o libmylib.a //库文件在当前目录下
编译时gcc库包含相关指令
参数 | 功能 |
---|---|
-L | 库文件所在目录 |
-l(L的小写) | 库文件名 |
-I(i的大写) | 头文件所在目录 |
//链接home目录下的libmylib.a静态库, 包含当前目录下的头文件
gcc 1.c -o run -L /home -lmylib -I ./
动态库
动态库只有在运行的时候才调用,占用空间小,常见库一般都是静态库,如libc
动态库一般以lib开头命名,以.so后缀结尾
动态库制作
1. 把所有需要的.c源文件生成对应的.o文件(不包括main函数)
gcc xxx.c -c -o xxx.o -fPIC
2. 使用工具将所有.o文件打包生成动态库
gcc -shared -o lib库名.so xxx.o
3. 解决动态库路径问题
-
方法一: 在终端输入(临时添加)
export LD_ LIBRARY_PATH = 绝对路径` -
方法二: 修改终端配置文件~/.bashrc
1. vim ~/.bashrc
2. export LD_LIBRARY_PATH=库所在目录的绝对路径添加文件最后一行
3. 重启终端或者运行命令 source ~/.bashrc 使用配置文件生效
-
方法三: 将动态库放到系统默认目录下 ===> /usr/lib
-
方法四: 配置文件 /etc/ld.so.conf
1. vim /etc/ld.so.conf
2. 将库文件的绝对路径添加到库的最后一行
3. 使配置文件生效:ldconfig -v
ps: ldd a.out可以查看执行文件所依赖的动态库
动态库和静态库在同一个目录下,默认包含的是动态库
4.编译时添加动态库
gcc ./src/main.c -L ./lib -lmylib -I ./include/ -o ./bin/a.out