静态库的制作和问题

一、静态库特点
静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件中取得所需的代码,复制到生成的可执行文件中的这种库。(百度百科)
二、如何制作静态库
1、先编译成*.o文件

2、压缩成*.a静态库文件

3、可以具体查看*.a文件包含哪些*.o文件

4、静态库的使用

其中-L指定静态库的存放位置

三、抛出问题:
1、使用nm 命令行查看main工具具体链接进来哪些函数。按上面静态库的定义,main程序只会链接使用到的函数。真是这样子吗?

如上,发现main程序链接了没有使用到的funA_one函数,但是也同样链接进来了。

2、那有没有办法可以只链接使用到的函数呢?

编译的时候添加-ffunction-sections和-fdata-sections选项。
链接的时候传入--gcc-sections选项,再-Wl的,后面不能加空格。

如果不加这几个编译选项,当*.a静态库很大时,会把很多无用的函数代码链接进程序中,从而占据了程序的代码段和数据段空间。会造成相应的Flash存储空间浪费。

四、整理后的测试代码

https://github.com/dyh-git/make_lib_static

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值