嵌入式笔记3

动态库 静态库链接
gcc –Wall demo.c显示所有警告(包括隐藏的)

库文件:存放函数和变量的仓库 特点:只能使用库里的函数和变量,不能看到其实现
静态库以.a结尾:当使用静态库时,库里的函数和变量是在编译时加载到可执行文件
动态库以.so结尾:当使用动态库时,库里的函数和变量是在运行时加载到可执行文件

可执行文件的大小:静态库>动态库 >内存的使用效率
可执行文件的速度:静态库>动态库 >运行效率
可执行文件的功能升级:静态库<动态库 >功能升级的难易程度
可执行文件的代码部署:静态库>动态库 >代码部署的位置

库文件的存放位置:/lib/user/lib
ar rcs:ar rcs libxxx.a xx1.o xx2.o
  参数r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置。
root@jsetc-virtual-machine:/test# gcc -c add.c
root@jsetc-virtual-machine:/test# vim add.o
root@jsetc-virtual-machine:/test# ar rcs libadd.a add.o
root@jsetc-virtual-machine:/test# ls
ad.c add add.c add.h add.o da.c kk libadd.a

代码转化二进制
root@jsetc-virtual-machine:/test# gcc -c add.c
root@jsetc-virtual-machine:/test# vim add.o
生成文件
root@jsetc-virtual-machine:/test# vim add.c
root@jsetc-virtual-machine:/test# vim ad.c
root@jsetc-virtual-machine:/test# gcc ad.c add.c -o add
ad.c: In function ‘main’:
ad.c:4:23: warning: implicit declaration of function ‘add’ [-Wimplicit-function-declaration]
printf(“add=%d\n”,add(5,6));
^~~
/tmp/ccEmt0ZW.o: In function main': ad.c:(.text+0x14): undefined reference toadd’
collect2: error: ld returned 1 exit status
root@jsetc-virtual-machine:/test# vim add.h
add.c
在这里插入图片描述
ad.c
主函数
Add.h(调用函数)
extern int add(int,int);
生成.o文件(二进制)
root@jsetc-virtual-machine:/test# gcc -c add.c
root@jsetc-virtual-machine:/test# vim add.o

文件运行
root@jsetc-virtual-machine:/test# gcc ad.c add.c -o add
root@jsetc-virtual-machine:/test# ./add
add=11
粘贴文件(返回上一级文件在复制到当前文件)
root@jsetc-virtual-machine:/test# cp libadd.a kk
root@jsetc-virtual-machine:/test# cd kk
root@jsetc-virtual-machine:/test/kk# ls
libadd.a
root@jsetc-virtual-machine:/test/kk# cp …/add.h
root@jsetc-virtual-machine:/test/kk# gcc main.c -ladd –L.静态编译(-L当前目录)
root@jsetc-virtual-machine:/test/kk# ls
add.h a.out libadd.a main.c
root@jsetc-virtual-machine:/test/kk# ./a.out
add=11
ladd到哪找文件
如何制作静态库和动态库
静态库
gcc –c源文件
ar rcs 库文件名字 目标文件
gcc 源文件 –l库名 –L库的路径(-L指定的路进去寻找库文件,一般的在-L的后面可以一次用-l指定多个库文件。-L/lib/表示到/lib/目录下找库文件)
(root@jsetc-virtual-machine:/test# gcc -c add.c
root@jsetc-virtual-machine:/test# vim add.o
root@jsetc-virtual-machine:/test# ar rcs libadd.a add.o
root@jsetc-virtual-machine:/test/kk# gcc main.c -ladd –L.
这部要另起一个文件夹)

动态库
gcc –shared –fPIC源文件 –o 库名
root@jsetc-virtual-machine:/test# gcc -shared -fPIC add.c -o libcal.so

root@jsetc-virtual-machine:/test# gcc ad.c ****/****libcal.so -o main (要添加路径)
/tmp/ccf8AvbP.o: In function main': ad.c:(.text+0xf): undefined reference toadd’(少当前路径
collect2: error: ld returned 1 exit status
root@jsetc-virtual-machine:/test# gcc ad.c **./**libcal.so -o main
gcc 源文件 ./库名 –o可执行文件
在这里插入图片描述
gcc 源文件 ./库名 –o可执行文件

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_49181551

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值