linux 下strip工具,linux下使用strip如何对库和可执行文件进行裁减
如果生成的可执行文件或库比较大,这时候就可以使用strip命令进行裁减,在嵌入式开发中,如果使用的交叉编译工具是arm-linux,则命令
是arm-linux-strip,如果是arm-uclibc-linux,则命令是arm-uclibc-linux-strip.
因为开发板上的空间本来就很少,使用这个命令可以进一步减少可执行文件的大小,从而可以在开发板上可以存放更过的可执行文件。下面简单介绍一下这个命令:
主要是把编译的库文件或者可执行文件里的一些调试信息和符号信息去除。
使用strip对库文件、可执行文件进行操作,库文件、可执行文件中的一些与正常运行无关的调试信息和符号信息会被剔除掉,而且操作前和操作后文件的大小
变化特别明显,一般可以减少1/3或更多,所以在嵌入式的平台上是非常有用的。但是在开发过程并不提倡这一做法,因为使用strip后,使用gdb时就无
法获得调试信息了
其支持的选项如下:
strip -h
用法:strip 输入文件
从文件中删除符号和节
选项为:
-I --input-target= 假定输入文件的格式为
-O --output-target= 以格式创建输出文件
-F --target= 设置输入、输出的文件格式为
-p --preserve-dates 复制上次修改或者操作的时间到输出文件中
-R --remove-section= 删除输出文件中段信息
-s --strip-all 删除所有符号信息和重定位信息
-g -S -d --strip-debug 删除所有调试信息和段信息
--strip-unneeded 删除所有重定位中不需要的符号信息
--only-keep-debug 删除调试信息以外的其他所有信息
-N --strip-symbol= 不拷贝符号信息
-K --keep-symbol= 不去除符号信息
-w --wildcard 在符号中使用通配符
-x --discard-all 去除所有非全局符号
-X --discard-locals 去除所有编译产生的符号
-v --verbose 列出所有修改过的所有目标文件
-V --version 显示版本号
-h --help 显示帮助
-o 把输出的文件名修改成
为了减少运行时库的大小,我们应该使用交叉编译版本即arm-linux-gcc
的strip工具来处理根文件系统的库文件,把二进制文件中的包含的符号表和调试信息删除掉。
例:
#arm-linux-strip /home/su/rootfs/lib/*.so
strip:
支持的目标: elf32-i386 a.out-i386-linux efi-app-ia32 elf32-little elf32-big
elf64-alpha ecoff-littlealpha elf64-little elf64-big elf32-littlearm
elf32-bigarm elf32-hppa-linux elf32-hppa elf64-ia64-little
elf64-ia64-big efi-app-ia64 elf32-m68k a.out-m68k-linux elf32-powerpc
aixcoff-rs6000 elf32-powerpcle ppcboot elf64-powerpc elf64-powerpcle
aixcoff64-rs6000 elf32-s390 elf64-s390 elf32-sparc a.out-sparc-linux
elf64-sparc a.out-sunos-big elf64-x86-64 pe-i386 pei-i386 srec
symbolsrec tekhex binary ihex trad-core
目标文件分为:可重定位文件、可执行文件、共享文件
strip的默认选项会去除.symbol节的内容以及.debug节的内容,因此尽量只对可执行文件执行strip而不要对静态库或动态库等目标文件strip。
测试代码如下:
int max(int val1, int val2)
{
int iVal = (val1 > val2) ? val1 : val2;
return iVal;
}
int min(int val1, int val2)
{
int iVal = (val1 < val2) ? val1 : val2;
return iVal;
}
#include
extern int max(int val1, int val2);
extern int min(int val1, int val2);
int main()
{
int val1, val2;
scanf("%d%d", &val1, &val2);
printf("%d\n", max(val1, val2));
printf("%d\n", min(val1, val2));
}
>gcc -c max.c min.c>ar rcs libcmp.a max.o min.o>gcc -o test main.c libcmp.a
>gcc -share -fPIC -o libcmp.so max.c min.c>cp libcmp.a libcmp.a.bak
>cp libcmp.so libcmp.so.bak>cp test test.orig>strip libcmp.a libcmp.so>strip test>ll -h
总计 92K
-rwxr-xr-x 1 6.9K a.out
-rw-r--r-- 1 1.1K libcmp.a
-rw-r--r-- 1 1.6K libcmp.a.bak
-rwxr-xr-x 1 2.9K libcmp.so
-rwxr-xr-x 1 5.3K libcmp.so.bak
-rw-r--r-- 1 237 main.c
-rw-r--r-- 1 89 max.c
-rw-r--r-- 1 695 max.o
-rw-r--r-- 1 89 min.c
-rw-r--r-- 1 695 min.o
-rwxr-xr-x 1 3.2K test
-rwxr-xr-x 1 6.8K test.orig
选项简释:
The -fPIC flag directs the compiler to generate position independent code section).
The -shared flag directs the linker to create a shared object file.
可
见无论是静态库(libcmp.a)还是动态库(libcmp.so)还是可执行文件(test),去掉一些符号信息后都减小了很多,但如果这时再链接这
两个库的话是编不过的,因此,如果不是指定特殊的strip选项的话,还是尽量不要对库文件strip,只对链接后的可执行文件strip就可以了(如果
也不调试)。
linux 下strip工具,linux下使用strip如何对库和可执行文件进行裁减相关推荐
- Linux漏洞建议工具Linux Exploit Suggester
Linux漏洞建议工具Linux Exploit Suggester 在Linux系统渗透测试中,通常使用Nessus.OpenVAS对目标主机进行扫描,获取目标主机可能存在的漏洞.如果无法进行漏洞 ...
- linux c语言工具,Linux下C语言编程环境的工具.doc
Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 要想在Linux下进行C语言编程,首先得搭建好一个编程环境.这里分别说明一下几个非常有用的软件包. ...
- linux gif录制工具,Linux下的GIF录制
本机OS: Ubuntu 14.04 x64 Windows下录制gif图片的工具很多,Linux下录制的工具比较少 之前一直都是用Android Studio自带的工具录制成视频,也有使用OBS录制 ...
- linux 网址转换工具,Linux下强大IP地址格式转换工具--netmask命令
由于一般的路由器.防火墙等并不支持IP地址范围的方式,所以工作中经常要把IP地址范围转换成子网掩码的格式.CIDR格式.思科反向子网掩码格式等! 虽然windows下有些工具可以做到,可是使用起来不方 ...
- linux中top工具,Linux命令工具 top详解
Linux命令工具 top详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不 ...
- linux语言 翻译工具,Linux文本转语音工具eSpeak介绍
Text to speech tool in Linux eSpeak是一款 Linux 命令行工具,能把文本转换成语音.它是一款简洁的语音合成器,用C语言编写而成,它支持英语和其它多种语言. eSp ...
- linux的locate工具,linux文本查找工具之locate、find
linux文本查找工具之locate.find 一.文件查找分为两类: 1.非实时查找:locate 2.实时查找:find 二.非实时查找:locate 非实时查找:查找速度快.非精准查找.模糊查找 ...
- linux sqlite图形工具,Linux操作系统下的几款svn gui工具介绍
由于git-svn不支持remote branch的合并(没想到啊~没想到!),便试用了几款linux下的svn gui工具,打算专门用来做branch之间的合并用.目前,试用了如下几种:rapids ...
- linux x下载工具,Linux下强大的Axel下载工具
Linux下经常用的下载软件有wget,wget是单线程下载,断点不能续传,Axel工具是linux下的http/ftp中强大下载工具,支持多线程下载和断点续下. 这里介绍Alex的安装.和简单使用. ...
最新文章
- 2018-3-23论文一种新型智能算法--狼群算法(笔记三)实验分析单峰,多峰,可分和不可分函数
- 计算机excel教程文字版,Excel函数教程:文本函数
- Android 多线程之Handler
- 同步阻塞、同步非阻塞、异步阻塞、异步非阻塞与 I/O 多路复用、Java NIO 之间的联系
- 竞价账户烧钱的七大病因和处理办法
- MAC和XCODE常用快捷键
- Exchange 接收连接器(Client、Default)区别
- 【图像融合】简单认识图像融合
- PERL 使用IO::Socket::INET模块实现socket编程
- 2014新浪研发project师实习笔试(哈尔滨站)
- kbmmw 的HTTPSmartService中的跨域访问
- 负载均衡算法详解与实践
- 基于Node.js打造Web在线聊天室
- IT黑马成长之CSDN第一篇博客
- 用Python做了一个 盯盘机器人,股票价格实时监控,还能邮件通知你!
- 郑豪7.17现货黄金下周一价格行情走势分析及开盘最新操作建议附多空单在线解套
- html5中ol的意思,详解HTML5中ol标签的用法
- 同步任务和异步任务执行过程
- 普元技术专家团作品大合集(2016年圣诞特辑)
- 用铁电存储器FRAM让穿戴式设备更省电
热门文章
- Windows CMD命令行一启动就闪退问题解决
- Leetcode 1087. Brace Expansion
- 服务器遇到一个意外的情况,阻止它完成请求
- java timestamp 使用_Java中针对Timestamp的操作解析
- AI遮天传 ML-集成学习
- jenkins,maven--创建自由风格的软件项目任务
- ios平台微信的语音文件AUD格式其实就是AMR格式
- 怎么选择WiFi短信认证硬件供应商?
- mysql基本数据类型、笔试题(2018-9-10)
- 黑苹果Yosemite 10.10.1懒人版完美安装及简单驱动设置