linux静态库与共享库

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: [email protected] 
	> 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: [email protected] 
> Created Time: Tue 14 Mar 2017 12:49:26 AM PDT
 ************************************************************************/


#include


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



你可能感兴趣的:(c/c++,linux,库,linux,c语言)