linux gcc strip命令简介
阅读目录
- strip简介
- strip示例
- strip命令用法
- 程序开发是否要strip
- 静态库如何strip
- 参考资料
strip简介
strip经常用来去除目标文件中的一些符号表、调试符号表信息,以减小静态库、动态库和程序的大小。
strip支持的选项可通过如下命令查看:
strip --help
strip示例
有如下test.c文件
//test.c
#include <stdio.h>int add(int x, int y)
{return x + y;
}int aaa;
int bbb = 1;
char szTest[] = "good";int main()
{int ccc = 2;return 0;
}
下面操作编译、并对比strip前后程序的差异
mayue:~/mayueadd/learn/gcc/strip$ gcc test.c
mayue:~/mayueadd/learn/gcc/strip$ ll a.out
-rwxrwxr-x 1 mayue mayue 8457 1月 16 11:06 a.out*
mayue:~/mayueadd/learn/gcc/strip$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x7413e8ec7c63fa4f78aca5d0c7584206d47709f6, not stripped
mayue:~/mayueadd/learn/gcc/strip$ nm a.out
0000000000600e50 d _DYNAMIC
0000000000600fe8 d _GLOBAL_OFFSET_TABLE_
00000000004005c8 R _IO_stdin_usedw _Jv_RegisterClasses
0000000000600e30 d __CTOR_END__
0000000000600e28 d __CTOR_LIST__
0000000000600e40 D __DTOR_END__
0000000000600e38 d __DTOR_LIST__
00000000004006c0 r __FRAME_END__
0000000000600e48 d __JCR_END__
0000000000600e48 d __JCR_LIST__
0000000000601024 A __bss_start
0000000000601008 D __data_start
0000000000400580 t __do_global_ctors_aux
0000000000400420 t __do_global_dtors_aux
0000000000601010 D __dso_handlew __gmon_start__
0000000000600e24 d __init_array_end
0000000000600e24 d __init_array_start
0000000000400570 T __libc_csu_fini
00000000004004e0 T __libc_csu_initU __libc_start_main@@GLIBC_2.2.5
0000000000601024 A _edata
0000000000601040 A _end
00000000004005b8 T _fini
0000000000400390 T _init
00000000004003d0 T _start
0000000000601038 B aaa
00000000004004b4 T add
0000000000601018 D bbb
00000000004003fc t call_gmon_start
0000000000601028 b completed.6531
0000000000601008 W data_start
0000000000601030 b dtor_idx.6533
0000000000400490 t frame_dummy
00000000004004c8 T main
000000000060101c D szTest
通过ls -l 命令可知, a.out的大小是8457个字节;
通过file命令可知, a.out是可执行文件, 且是not stripped, 也就是带符号表和调试信息的;
通过nm命令, 可以读出a.out中的符号信息;
现在将a.out程序经过strip处理后得到如下结果
mayue:~/mayueadd/learn/gcc/strip$
mayue:~/mayueadd/learn/gcc/strip$ strip a.out
mayue:~/mayueadd/learn/gcc/strip$ ls -l a.out
-rwxrwxr-x 1 mayue mayue 6208 1月 16 11:08 a.out
mayue:~/mayueadd/learn/gcc/strip$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x7413e8ec7c63fa4f78aca5d0c7584206d47709f6, stripped
mayue:~/mayueadd/learn/gcc/strip$ nm a.out
nm: a.out: no symbols
通过ls -l 命令可知, a.out的大小是6208个字节, 程序大小减小;
通过file命令可知, a.out是可执行文件, 且是stripped, 也就是strip处理过的;
通过nm命令, 发现a.out中的符号没有了;
strip命令用法
https://www.linuxidc.com/Linux/2011-05/35773.htm
程序开发是否要strip
strip可以压缩目标文件、静态库、动态库、可执行程序的大小,但是会失去符号表、调试符号表信息。为了方便定位问题(比如定位 core dump问题), 建议, 尽量不要strip, 除非存储紧张。
在实际的开发中, 若需要对动态库.so进行strip操作, 减少占地空间。 通常的做法是: strip前的库用来调试, strip后的库用来实际发布, 他们两者有对应关系。 一旦发布的strip后的库出了问题, 就可以找对应的未strip的库来定位。
静态库如何strip
https://www.cnblogs.com/welhzh/p/4858695.html
参考资料
https://blog.csdn.net/stpeace/article/details/47090255
https://blog.csdn.net/stpeace/article/details/52202420
https://blog.csdn.net/stpeace/article/details/52099242
linux gcc strip命令简介相关推荐
- linux strip作用,linux gcc strip命令简介
阅读目录 strip简介 strip经常用来去除目标文件中的一些符号表.调试符号表信息,以减小静态库.动态库和程序的大小. strip支持的选项可通过如下命令查看: strip --help stri ...
- 【linux】strip命令简介------给文件脱衣服
作为一名linux开发人员, 如果没有听说过strip命令, 那是很不应该的. strip这个单词, 大家应该早就学过了, 你就记住是脱衣服就行了, 别的不要多想. 在linux中, strip也有脱 ...
- Linux GCC 常用命令
Linux GCC 常用命令与汇编 文章目录 Linux GCC 常用命令与汇编 1 .简介 2 .简单编译 2.1 预处理 2.2 编译为汇编代码 2.3 汇编(Assembly) 2.4 连接(L ...
- Linux GCC常用命令和ELF文件格式
Linux GCC常用命令和ELF文件格式 一.各种工具 (一)GCC编译工具 (二)Binutils (三)C 运行库 一. C 语言程序 Hello.c示例 (一)准备工作 (二)编译过程 1.预 ...
- linux中的strip命令简介------给文件脱衣服
作为一名linux开发人员, 如果没有听说过strip命令, 那是很不应该的. strip这个单词, 大家应该早就学过了, 你就记住是脱衣服就行了, 别的不要多想. 在linux中, ...
- linux gcc strip 去文件头工具
作为一名Linux开发人员, 如果没有听说过strip命令, 那是很不应该的. strip这个单词, 大家应该早就学过了, 你就记住是脱衣服就行了, 别的不要多想. 在linux中, strip也有脱 ...
- linux shell install 命令简介
用法:install [选项]... [-T] 源文件 目标文件 或:install [选项]... 源文件... 目录 或:install [选项]... -t 目录 源文件... 或:instal ...
- linux strip 命令,Linux中strip命令起什么作用呢?
摘要: 下文讲述Linux中strip的功能说明,如下所示: strip命令功能: 用于除去绑定程序和符号调试程序使用的信息, 达到降低扩展公共对象文件格式(XCOFF)的对象文件的大小 strip命 ...
- linux shell find 命令简介
find命令格式: find path -option [ -print ] [ -exec -ok |xargs |grep ] [ command {} \; ] fi ...
最新文章
- PAT(甲级)2021年春季考试 7-1 Arithmetic Progression of Primes
- 怎样设计出优秀的测试用例?看看下面就知道了
- vconsole插件_手机前端开发调试利器 – vConsole
- Linux常用的基本命令01
- python资料书-关于 Python 的经典入门书籍有哪些?
- HDU4549 M斐波那契数列(矩阵快速幂+费马小定理)
- OpenSUSE 13.1 和 OpenSUSE 12.3 用户如何安装 Cinnamon 2.2 桌面
- 执行umount 的时候却提示:device is busy 的处理方法
- OAuth2.0的四种授权方式
- boost::histogram::detail::accumulator_traits用法的测试程序
- PHP区域联动后端接口与数据表设计
- 面向对象分析方法(Object-Oriented Analysis,OOA)
- futuretask java 并发请求_Java并发机制(9)--Callable、Future、FutureTask的使用
- Spring Boot使用Poi将Excel导入进数据库
- 关于成员变量和局部变量是否都会被默认初始化的问题
- 土人系列AS入门教程--对象篇
- bmp格式图像的读写函数(对一个开源代码的封装)
- Atitit 团队工具链体系打造---开发方面提升效率的软件与技术体系 attilax总结.docx
- android camera无预览拍照 后台拍照
- 视频播放的时候不拦截OK键
热门文章
- 关于HTML的一些知识
- python版亲戚关系计算器
- #include<intrins.h>中包含的函数说明
- 黑白照片如何变彩色?建议收藏这些方法
- ubuntu server 14.04 编译安装xen4.4.2配置vtpm(三)——创建DomU(a PV VM)
- 手机CPU与电脑CPU性能究竟相差多少?
- 国密sm2 js加密后台解密,sm3 js、后台加密,sm4 后台加密
- 电脑重启后自带键盘失灵而外接键盘有用的一种情况
- python打开各种文件格式_使用python读取数据科学最常用的文件格式(转)
- DiskGenius安装教程