linux中静态库和动态库

 

静态库        是在程序执行前(编译)就加入到了目标程序中去了;

优点:运行快

缺点:程序太大

动态库        是在程序执行时动态(临时)由目标程序去调用;

缺点:运行慢

优点:程序小而简洁


1.静态库的制作

//1. 将 .c 文件生成 .o 文件
gcc demo1.c -c

//则会生成一个demo1.o文件

//2. 再把 .o 文件生成 .a 静态库文件
ar rcs libdemo1.a demo1.o

//怎么使用
gcc demo2.c -ldemo1 -L ./ -o demo        (-L ./ 表示指定从当前路径找库文件)

-l 是制定要用的静态库,库名掐头去尾
-L 告诉gcc编译器从-L指定的路径去找静态库,默认是从/usr/lib /usr/local/lib去找

//此时静态库已经编译到可执行程序中了

./demo 即可运行

//以上模拟分文件编程情况,demo2.c为主函数,demo1.c为功能函数
//当我们想将demo1.c分享给别人使用 但又不想给源码时,可使用这种方法

2.动态库的制作

//先生成一个 .so 动态库 文件
gcc -shared -fpic demo1.c -o libdemo1.so
// -shared 指定生成动态库 

//怎么用
gcc demo2.c -ldemo1 -L ./ -o demo

-l 是制定要用的动态库,库名掐头去尾

运行前输入以下指令,指定该程序运行时候,在LD_LIBRARY_PATH 所指定的路径去找库文件

export LD_LIBRARY_PATH="/home/pi/back/test" //引号内为.so动态库文件所在路径

./demo 即可运行

但此时./demo仅在当前终端能有效运行

改进:

    写一个脚本
    vi start.sh

    给该脚本加一个可执行权限
    chmod +x start.sh

    ./start.sh 即可在所有终端运行

脚本内容

export LD_LIBRARY_PATH="/home/pi/back/test"

./demo

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值