A.静态库的创建与使用:
1.通过gcc -c xxdk.c 生成目标文件=> xxdk.o
2.通过ar crs -o libxxdk.a xxdk.o 生成静态库 => libxxdk.a
3.通过gcc main.c -o main -L. -lxxdk 链接静态库编译,生成可执行文件main
4.执行main即可
B.动态库的创建和使用:
1.通过gcc -c xxdk.c 生成目标文件 => xxdk.o
2.通过gcc -fPIC -shared -o libxxdk.so xxdk.o 生成动态库文件 => libxxdk.so
3.通过gcc main.c -o main -L. -lxxdk 生成可执行文件 => main
4,此时,运行找不到库文件,我们需要(任意选一)
(1)将libxxdk.so放到/usr/lib或/lib目录下
(2)通过export LD_LIBRARY_PATH=/home/Linux/xxdk/ 将库所在的绝对路径添加至环境变量中(通过echo $LD_LIBRARY_PATH查看此环境变量的值;通过unset LD_LIBRARY_PATH来删除此环境变量里的值)
(3)在/etc/ld.so.conf.d/下新建一个sudo vi my.conf文件,在里面写入库所在的绝对路径,保存并执行sudo ldconfig执行配置文件。
区别:
1、静态库在编译的时候被加载,动态库在执行的之后被加载
2、加载静态库编译所生成的可执行文件比使用动态库的方式要大
3、静态库以.a为后缀,动态库以.so为后缀
实例:
库的源文件
- /*************************************************************************
- > File Name: calc.c
- > Author: XXDK
- > Email: v.manstein@qq.com
- > Created Time: Tue 14 Mar 2017 12:46:27 AM PDT
- ************************************************************************/
- int addx(int a, int b)
- {
- return (a + b);
- }
- int subx(int a, int b)
- {
- return (a - b);
- }
- int mulx(int a, int b)
- {
- return (a * b);
- }
- int divx(int a, int b)
- {
- return (a / b);
- }
/*************************************************************************
> File Name: calc.c
> Author: XXDK
> Email: v.manstein@qq.com
> Created Time: Tue 14 Mar 2017 12:46:27 AM PDT
************************************************************************/
int addx(int a, int b)
{
return (a + b);
}
int subx(int a, int b)
{
return (a - b);
}
int mulx(int a, int b)
{
return (a * b);
}
int divx(int a, int b)
{
return (a / b);
}
调用库的测试文件:
/*************************************************************************
> File Name: main.c
> Author: XXDK
> Email: v.manstein@qq.com
> Created Time: Tue 14 Mar 2017 12:49:26 AM PDT
************************************************************************/
#include<stdio.h>
int main()
{
int a = 88;
int b = 22;
printf("a + b = %d\n", addx(a, b));
printf("a - b = %d\n", subx(a, b));
printf("a * b = %d\n", mulx(a, b));
printf("a / b = %d\n", divx(a, b));
return 0;
}
测试方法:
A:静态库方式
1. gcc -c calc.c
2. ar -crs -o libcalc.a calc.o
3. gcc main.c -o main -L. -lcalc
4. ./main
A:动态库方式
1. gcc -c calc.c
2. gcc -fPIC -shared -o libcalc.so calc.o
3. gcc main.c -o main -L. -lcalc
4. .export LD_LIBRARY_PATH=/home/xxdk/test/
5. ./main