动态库和静态库的制作及使用
1.1静态库制作和使用
ubuntu@ubuntu:static_lib$ tree
.
├── inc
│ └── add.h
├── lib
└── src
├── add.c
└── main.c
头文件:add.h
#ifndef __ADD_H__
#define __ADD_H__
int add(int a,int b);
#endif
源程序:add.c
int add(int a,int b)
{
return a+b;
}
主函数:main.c
#include <myhead.h>
#include <add.h>
int main(int argc, const char *argv[])
{
printf("%d\n",add(100,200));
return 0;
}
1.2将源程序编译生成静态库
gcc -c add.c -o add.o //只编译不链接,生成一个源程序的二进制文件add.o
ar -crs libadd.a add.o //依赖于add.o生成一个add.a的静态库
ubuntu@ubuntu:src$ gcc -c add.c -o add.o
ubuntu@ubuntu:src$ ar -crs ../lib/libadd.a add.o
.ubuntu@ubuntu:static_lib$ tree
├── inc
│ └── add.h
├── lib
│ └── libadd.a
└── src
├── add.c
├── add.o
└── main.c
1.3 使用静态库
gcc main.c -L 库的路径 -l 库名 -l 头文件路径
./a.out
ubuntu@ubuntu:src$ gcc main.c -L ../lib/ -ladd -I ../inc/
ubuntu@ubuntu:src$ ./a.out
300
2.动态库的制作及使用
2.1创建
ubuntu@ubuntu:dynamic_lib$ tree . ├── inc │ └── add.h ├── lib └── src ├── add.c └── main.c
2.2编译生成动态库
2.3 编译可执行文件:gcc main.c -L ../lib/-ladd -L ../inc
指定库的路径
方式一:将自己的库放在lib
ubuntu@ubuntu:lib$ sudo mv libadd.so /lib ubuntu@ubuntu:lib$ cd ../src/ ubuntu@ubuntu:src$ ./a.out 300
方式二:通过命令指定库的路径(只在当前终端生效)
ubuntu@ubuntu:src$ export LD_LIBRARY_PATH=../lib/ ubuntu@ubuntu:src$ ./a.out 300
方式三:通过修改库的配置文件让其生效
ubuntu@ubuntu:src$ sudo vi /etc/ld.so.conf.d/libc.conf
ubuntu@ubuntu:src$ sudo ldconfig ubuntu@ubuntu:src$ ./a.out 300
ubuntu@ubuntu:dynamic_lib$ tree . ├── inc │ └── add.h ├── lib │ └── libadd.so └── src ├── add.c ├── a.out └── main.c