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

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表面该方法符号不会被放到动态符号表里,所以其它模块(可执行文件或者动态库)不可以通过符号表访问该方法。

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

Linux下减小动态库大小的方法相关推荐

  1. linux 下的动态库制作 以及在python 中如何调用 c 函数库

    linux 下的动态库制作 以及在python 中如何调用 c 函数库 动态库: 动态库又称动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序 ...

  2. Linux下的动态库和静态库

    什么是库? 在 Linux 开发时,我们经常会看到一些形如 xxx.so 的名称出现,其中 so 是 Shared Object 的缩写,即可以共享的目标文件,也就是我们所称为的动态链接库,和在 Wi ...

  3. Linux 下的动态库、静态库与环境变量

    最近这几天在处理集群软件的过程中,遇到各种各样的库和环境变量的问题,被虐的不清!趁此机会,整理了一下 Linux 下静态库.动态库(共享库)和环境变量的一些知识,与大家共享一下. 库的种类 Linux ...

  4. C++文件如何在linux下生成动态库So,以及如何使用这个动态库

    引用:http://blog.csdn.net/xuguang121/article/details/7457565 不同组件之间,如何提供一个动态库给其他Team使用,这样使用者也不需要关心和维护你 ...

  5. linux下设定动态库路径的命令-error while loading shared libraries: xxx.so.x错误的原因和解决办法

    网站:http://blog.chinaunix.net/uid-26212859-id-3256667.html 一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: ...

  6. linux查看动态库导出的符号,Linux下控制动态库导出

    在Linux中动态库的确给程序带来了良好的扩充性,并减少了内存的使用量,但这是有代价的.例如: #include Int main(int argc, char *argv[]) { Printf(& ...

  7. Linux下创建动态库与使用

    参考文章:dll和so文件区别与构成:http://www.cnblogs.com/likwo/archive/2012/05/09/2492225.html 动态库路径配置- /etc/ld.so. ...

  8. linux下制作动态库

    1.动态库的介绍 动态库,也叫共享库. 动态库与用户编写的程序相互独立,不被包含在用户生成的可执行文件当中 2.动态库的创建 第一步:将写好的程序编译 我们事先写好两个程序,bye.c hello.c ...

  9. 解决Linux多个动态库间的符号冲突问题

    c和c++开发人员或多或少都使用过Linux动态库,但是很多时候我们都不会去深入了解其中的一些细节和原理,直到自己的程序出现莫名其妙的问题后才会去着手解决,我也是在遇到一些动态库的问题后才去深入寻找解 ...

最新文章

  1. whlie and for
  2. OpenCV cv :: UMat与DirectX9ex曲面的互操作性的实例(附完整代码)
  3. 02: MySQL的安装与基本配置
  4. mysql数据到导入导出
  5. LeetCode 288. 单词的唯一缩写(哈希)
  6. 11相机不流畅_小米11有望本月发布,小米10退位让贤,256GB版本跌至3799
  7. Javascript版的Repeater控件实现
  8. SpringSocial业务系统与社交网站的绑定与解绑
  9. 下载android平台源码
  10. 数据结构实验3-带头结点的单链表
  11. 安卓APK文件结构解析 怎样去除内置广告 及修改图标和文字
  12. 渗透测试技术----服务扫描(一)--Banner、服务版本扫描、操作系统识别
  13. usaco 1.1 greedy gift givers
  14. python毕业设计总结范文大全_毕业设计心得体会范文3篇
  15. 51Talk-Level 7 Unit 2 L3
  16. 你的生活布满了网络爬虫
  17. 2011年LAMP兄弟连PHP学习优惠政策第一季!
  18. 如何关闭AndroidX?
  19. 文本特征提取——one-hot
  20. 西密歇根大学计算机科学专业排名,西密歇根大学有哪些专业_专业排名(USNEWS美国大学排名)...

热门文章

  1. 虹软校招笔试题--算法岗
  2. bigdecimal计算开n次方_学会使用基从考试电脑计算器,提高过关率
  3. 国外免费在线计算机课程学习
  4. 【象群算法】基于象群算法求解单目标问题附matlab代码(Elephant Herding Optimization,EHO)
  5. 列表li边框重合问题
  6. 【送书福利-第五期】《网络结构数据分析与应用》
  7. python对数函数定义域如何为一切实数_函数的定义域为一切实数
  8. 工业树莓派解决传统数据设备数据上云问题
  9. ZYNQ开发-Petalinux配置u-boot设备树
  10. pip 临时换源(阿里云、 豆瓣、 清华大学 、中国科学技术大学)