linux静态库与共享库



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为后缀

实例:

得意库的源文件

  1. /*************************************************************************  
  2.     > File Name: calc.c  
  3.     > Author: XXDK  
  4.     > Email: v.manstein@qq.com   
  5.     > Created Time: Tue 14 Mar 2017 12:46:27 AM PDT  
  6.  ************************************************************************/  
  7.   
  8. int addx(int a, int b)  
  9. {  
  10.     return (a + b);  
  11. }  
  12. int subx(int a, int b)  
  13. {  
  14.     return (a - b);  
  15. }  
  16. int mulx(int a, int b)  
  17. {  
  18.     return (a * b);  
  19. }  
  20. int divx(int a, int b)  
  21. {  
  22.     return (a / b);  
  23. }  
/*************************************************************************
	> 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值