编译linux使用的.a库,linux下的库(so,a)编译流程

总结一下上周讲的库的编译流程。 linux下的库作用 对于编程人员就不必说了吧,linux下有两种库:动态库(共享库)和静态库

Q(OI]5E0   1.两者区别:51Testing软件测试网G7~o2k`)c&b7Y3R51Testing软件测试网|2ep/h4a5L:z5j2u

静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大。51Testing软件测试网Z"xkB(}#]51Testing软件测试网#j,wAeIP!R

动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。不同的应用程序如果调用相同的库,那么在内存中只需要有一份该动态库(共享库)的实例。Z^ A*E5e@X$@h0

Yxx;c@&M*y0    静态库和共享库的最大区别,静态情况下,把库直接加载到程序中,而共享库链接的时候,它只是保留接口,将动态库与程序代码独立,这样就可以提高代码的可复用度,和降低程序的耦合度。51Testing软件测试网'B/eE8SG/g*n)v]r-o51Testing软件测试网/X|"i1G)WQ)_

静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在51Testing软件测试网q4HZ RT;L

:[ H(bO*|ts4M:p0   2.静态库51Testing软件测试网Nk P*M:z

e8bhC51Testing软件测试网_9p]aafdjj&Mxd

2.1 基础概念与相关命令N9^;~+{;[D0pK051Testing软件测试网(r/Y3BF~"~g

a:库名格式lib.a,例如libmytest.ajW Crc*u0

d0I)jP*yB\0      b:ar命令创建静态库文件51Testing软件测试网3CD{/ti7v5D?Q#}

{4h_YE)h$xI0          d -----从指定的静态库文件中删除文件

9{i?/wH9z(q@0          m -----把文件移动到指定的静态库文件中51Testing软件测试网

l+Ye{.L/{3b+@

p -----把静态库文件中指定的文件输出到标准输出

I*H`IgpH-l0          q -----快速地把文件追加到静态库文件中51Testing软件测试网MMFZ"^q8O

r -----把文件插入到静态库文件中51Testing软件测试网vR4Yly'^)F

t -----显示静态库文件中文件的列表

4el.a;TU(KN0          x -----从静态库文件中提取文件51Testing软件测试网"Fxh3Uks(f3v

还有多个修饰符修改以上基本选项,详细请man ar 以下列出三个:51Testing软件测试网m7c6j3{.E+}E@

a -----把新的目标文件(*.o)添加到静态库文件中现有文件之后

3UC4F$SM9{q8pBO0          b -----***************************************之前51Testing软件测试网7ye`#\L6E'eD

v -----使用详细模式

6qoM W L3m#~0         ar 命令的命令行格式如下:

&C7iLD!h%a#i1I0          ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files... 参数archive定义库的名称, files是库文件中包含的目标文件的清单, 用空格分隔每个文件

`ezAz;gKA%IB+c0       cc 参数cc   -l把库做链接,静态库名称-L制定静态库路径51Testing软件测试网FuL]p3ZZ@

2.2 静态库制作及编译流程:51Testing软件测试网+m,L;i'j#It+zA

2.2.1.首先我们编写一个.c程序代码,内容如下:51Testing软件测试网V r"d s!_H&q~kkjl

//#include51Testing软件测试网T$Lat/a|,F51Testing软件测试网uEK9\9VZ8D

vl

int test(void){

_%dGdvo7V#h0            printf(" xiaolin hello");51Testing软件测试网_`GkSGn51Testing软件测试网i`!a ~H)t)S"b

}51Testing软件测试网S:I\-r0BX/@

%]1ndr5}p0o0        2.2.2.编译test.c生成test.o文件4p%C,z5H"S1N8o

mq051Testing软件测试网7|G4vU4_9PT

cc test.c -c51Testing软件测试网G5IOU^"CGWrOu

Fn-HkQm6Td0        执行完成之后会生成一个test.o的二进制文件Op(\ K/R.VN ~0

{M"ah'W;K@kh0        2.2.3.把.o文件打成.a静态库文件51Testing软件测试网/MZU/\2@V%\

^Hrrl-Jn0       ar crs libmytest.a test.o#pl&]g^ B%d051Testing软件测试网&IqXa"{

?L?

ar操作可以跟多个.o文件,需要空格,一起打成 mytest,使用ar -t libmytest.a  显示库包含的.o文件f2qhNMB4T&f0

X!|T

FtX7|w`.Y0        2.2.4.进行静态库编译并执行`9d-s.Bk0

l*M2fs3dro&w0        编写一个man.c程序代码,内容如下:n5@*fqXZM051Testing软件测试网&_i{9p@"TAT-C

int main(int argc,char **argv){d@5DtBf0z}9~hI051Testing软件测试网;`g$q+p1w*F7l6T-h

printftest();}-GL-tdP^0f+?4]051Testing软件测试网c4dK1ZV5P+P%et]

编译main.c加载静态库51Testing软件测试网4D,c4K!o$A_S`q

qC`6Xe#g2HE0       cc main.c -lmytest -L.h;RT#QNGK0

8K@0y7_?%a0-l静态库名称  -L静态库路径 .指当前目录2{#x`&CN1G't;v051Testing软件测试网[A+f1Wn?1?c

编译完成执行./a.out输出xiaolin hello5IKRNr#`*z0

zdxU@aM%b03.动态库(共享库so)51Testing软件测试网a6y\8XI2v$?8Tu51Testing软件测试网_s]9_$Y{K9u `

51Testing软件测试网E6O"XY)q(ky%p51Testing软件测试网eZ1nqA4W

3.1 基础概念与相关命令51Testing软件测试网;BdEX@_-E!B51Testing软件测试网[LAc2l:X%M+}4w

a:库名格式lib.so,例如libmyshare.so51Testing软件测试网XLsvj&H,N

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>