Linux下减小动态库大小的方法

在一些业务场景下,需要对动态库的大小进行限制,主要有如下几种方法:

1. 编译选项使用-Os,表示以最小化大小为优化方向

2. 去除-g选项,进而去除调试信息

3. 通过strip裁剪符号及调试信息

4. 只导出必要符号

Linux默认导出所有符号,并不仅仅导出你开放的接口!

定义如下宏:

#define SYMBOL_EXPORT __attribute__ ((visibility("default")))

在你想导出的符号前加上SYMBOL_EXPORT就好。

同时,需要在脚本中增加如下编译选项:-fvisibility=hidden

譬如:导出符号是int add(int a, int b);那么添加的结果就是SYMBOL_EXPORT int add(int a, int b);

通过这种方式只导出想导出的符号,也可以减小库大小。

 

备注

“default”:用它定义的符号将被导出,动态库中的函数默认是可见的。”hidden”:用它定义的符号将不被导出,并且不能从其它对象进行使用,动态库中的函数是被隐藏的。

default意味着该方法对其它模块是可见的。而hidden表面该方法符号不会被放到动态符号表里,所以其它模块(可执行文件或者动态库)不可以通过符号表访问该方法。

 

扫描二维码,关注“小眼睛的梦呓”公众号,在手机端查看文章
扫描二维码,关注“清远的梦呓”公众号,在手机端查看文章

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值