ubuntu中静态和动态库的制作

文章详细介绍了如何在Linux环境下制作静态库(.a)和动态库(.so),包括编译步骤和使用方法。静态库在编译时与源文件链接,导致可执行文件较大,而动态库在运行时才加载,可以减少程序大小。动态库的使用需要确保库文件路径正确或设置环境变量。
摘要由CSDN通过智能技术生成

静态库的制作:

1.将.c文件编译成.o文件

gcc source.c -o source.o -c

或者可简写为

gcc -c source.c
2.将.o文件编译成.a文件(静态库文件)

ar -rc libsource.a source.o

-r 将文件插入到库文件中 -c建立库文件

3.使用时,只需要将.a文件当成普通的.c或者.o文件加入gcc编译即可

gcc main.c libsource.a -o main

注意:有时候库文件的顺序会影响编译的结果

实际项目中,静态库的使用是少见的,原因是静态库在编译阶段与源文件链接,会造成生成的最终可执行程序过大,那么动态库就是解决静态库这种问题的

动态库的制作

1.把.c文件编译成.so动态库

gcc -fpic -shared source.c -o libsource.so

2.在工程编译的时候,将动态库的路径和名字(source)加载进来--注意动态库的库文件名字

gcc -o project main.c -L <库文件路径> -l库文件名字
gcc main.c -o project  -L ./ -lsource

3.执行时候系统会自动去(/lib)中查找该库文件,如果没有查找到会报错

解决办法:

                第一种方法:把libsource.so考本到/lib中

                第二种方法:添加环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<库文件所在路径>

两者区别:

一、在编译上,静态库使用.o文件生成静态库,动态库使用.c文件直接生成静态库

二、在编译工程项目时,需要将静态库也作为其中的“材料”来编译,而动态库只需要main.c但是需要将动态库文件存放于/lib目录下或者通过添加环境变量指定动态库所在的位置

三、静态库由于编译工程的时候已经把静态库文件组合成可执行程序,执行时,只需直接运行生成的目标程序即可,动态库由于只是在编译的时候记录了动态库的路径以及动态库的名字,因此在运行的时候需要将动态库文件存放在/lib或者添加环境变量

四、生成静态库和动态库的使用的命令不一样,静态库使用ar -rc 动态库使用gcc
————————————————
版权声明:本文为CSDN博主「知识变现」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_50603017/article/details/122320945

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值