GCC制作静态库详解

目录

前言

一.静态动态库区别

二.静态库制作

2.1 库文件命名

三.静态库文件制作

3.1 静态库制作

3.1.1 先获得.o文件

3.1.2 生成静态库文件

3.1.3 删除不必要文件

3.1.4 使用静态库

3.1.5 使用运行运行


前言

带大家快速入门,学会制作静态库。本文详细介绍在Linux系统中使用gcc制作静态库的各种细节:库文件的命名: 必须使用lib作为前缀: 比如 libDeployPkg.so.0 / libhgfs.so.0 .....;静态库一般以 .a 为后缀 ;动态库一般以.so为后缀 库文件会有不同的版本, 一般写在后缀后面, 比如 lib.a.so.0.1.2

一.静态动态库区别

静态库和动态库是程序开发的两种库类型,它们在链接方式、可执行文件的独立性以及运行时加载上有着本质的区别。

首先,静态库在程序编译时会被完整地拷贝到最终的可执行文件中。这意味着使用静态库的程序在部署时不需要依赖额外的库文件,因为所有需要的代码都已经包含在内。这样做的好处是简化了程序的分发,因为用户无需安装任何额外的库即可运行程序。然而,这也导致了可执行文件体积较大,且如果静态库更新,需要重新编译整个程序以包含新的库版本。

其次,动态库在程序编译时不包含在可执行文件中,而是在程序运行时由操作系统加载。这意味着可执行文件体积较小,且当动态库更新时,只需替换库文件即可,无需重新编译程序。动态库的使用提高了代码的复用性,降低了程序之间的耦合度。但是,它要求在用户的系统上安装有相应版本的动态库文件,否则程序可能无法运行。

最后,从文件扩展名来看,静态库通常以“.a”或“.lib”为扩展名,而动态库则以“.so”或“.dll”为扩展名。这些扩展名分别对应不同的操作系统和平台。

总的来说,静态库和动态库各有优势和不足。在选择使用时,需要根据项目的具体需求来决定。例如,如果希望简化部署并且不依赖于外部库,可能会倾向于使用静态库;而如果关注于程序的更新和维护,以及减小可执行文件的大小,动态库可能是更好的选择。此外,还需要考虑目标用户的环境,确保他们能够访问到正确的库版本。

二.静态库制作

2.1 库文件命名

库文件的命名:

必须使用lib作为前缀: 比如 libDeployPkg.so.0 / libhgfs.so.0 .....

静态库一般以 .a 为后缀

动态库一般以.so为后缀 库文件会有不同的版本, 一般写在后缀后面, 比如 lib.a.so.0.1.2

三.静态库文件制作

不管需要制作的是静态库还是动态库,原材料都是.o文件 (可重定位文件) 库文件内部不允许出现主函数main

gcc xxx.c -o xxx.o -c 

3.1 静态库制作

文件结构

3.1.1 先获得.o文件

gcc  max.c -o max.o  -c -FPIC -I../inc
gcc  sum.c -o sum.o  -c -FPIC -I../inc

3.1.2 生成静态库文件

把以上生成的两个.o文件一起编译生成静态库文件

ar -rcs libmy_lib.a max.o swap.o

3.1.3 删除不必要文件

删除写文件,方便观察

rm max.c max.o sum.c sum.o

3.1.4 使用静态库

如何使用静态库文件

 gcc src/*.c -I./inc -L./lib -lmy_lib -o bin/main

3.1.5 使用运行运行

直接进去bin目录运行就可以输出了

注意:制作完静态库的时,不建议把头文件也删除。

以上是本期内容,若有错误或不懂,欢迎评论私信!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

锻炼²

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

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

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

打赏作者

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

抵扣说明:

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

余额充值