阅读目录

  • 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命令简介相关推荐

  1. linux strip作用,linux gcc strip命令简介

    阅读目录 strip简介 strip经常用来去除目标文件中的一些符号表.调试符号表信息,以减小静态库.动态库和程序的大小. strip支持的选项可通过如下命令查看: strip --help stri ...

  2. 【linux】strip命令简介------给文件脱衣服

    作为一名linux开发人员, 如果没有听说过strip命令, 那是很不应该的. strip这个单词, 大家应该早就学过了, 你就记住是脱衣服就行了, 别的不要多想. 在linux中, strip也有脱 ...

  3. Linux GCC 常用命令

    Linux GCC 常用命令与汇编 文章目录 Linux GCC 常用命令与汇编 1 .简介 2 .简单编译 2.1 预处理 2.2 编译为汇编代码 2.3 汇编(Assembly) 2.4 连接(L ...

  4. Linux GCC常用命令和ELF文件格式

    Linux GCC常用命令和ELF文件格式 一.各种工具 (一)GCC编译工具 (二)Binutils (三)C 运行库 一. C 语言程序 Hello.c示例 (一)准备工作 (二)编译过程 1.预 ...

  5. linux中的strip命令简介------给文件脱衣服

            作为一名linux开发人员, 如果没有听说过strip命令, 那是很不应该的. strip这个单词, 大家应该早就学过了, 你就记住是脱衣服就行了, 别的不要多想. 在linux中, ...

  6. linux gcc strip 去文件头工具

    作为一名Linux开发人员, 如果没有听说过strip命令, 那是很不应该的. strip这个单词, 大家应该早就学过了, 你就记住是脱衣服就行了, 别的不要多想. 在linux中, strip也有脱 ...

  7. linux shell install 命令简介

    用法:install [选项]... [-T] 源文件 目标文件 或:install [选项]... 源文件... 目录 或:install [选项]... -t 目录 源文件... 或:instal ...

  8. linux strip 命令,Linux中strip命令起什么作用呢?

    摘要: 下文讲述Linux中strip的功能说明,如下所示: strip命令功能: 用于除去绑定程序和符号调试程序使用的信息, 达到降低扩展公共对象文件格式(XCOFF)的对象文件的大小 strip命 ...

  9. linux shell find 命令简介

    find命令格式: find   path  -option  [ -print ]  [ -exec   -ok   |xargs  |grep  ] [  command  {} \;  ] fi ...

最新文章

  1. PAT(甲级)2021年春季考试 7-1 Arithmetic Progression of Primes
  2. 怎样设计出优秀的测试用例?看看下面就知道了
  3. vconsole插件_手机前端开发调试利器 – vConsole
  4. Linux常用的基本命令01
  5. python资料书-关于 Python 的经典入门书籍有哪些?
  6. HDU4549 M斐波那契数列(矩阵快速幂+费马小定理)
  7. OpenSUSE 13.1 和 OpenSUSE 12.3 用户如何安装 Cinnamon 2.2 桌面
  8. 执行umount 的时候却提示:device is busy 的处理方法
  9. OAuth2.0的四种授权方式
  10. boost::histogram::detail::accumulator_traits用法的测试程序
  11. PHP区域联动后端接口与数据表设计
  12. 面向对象分析方法(Object-Oriented Analysis,OOA)
  13. futuretask java 并发请求_Java并发机制(9)--Callable、Future、FutureTask的使用
  14. Spring Boot使用Poi将Excel导入进数据库
  15. 关于成员变量和局部变量是否都会被默认初始化的问题
  16. 土人系列AS入门教程--对象篇
  17. bmp格式图像的读写函数(对一个开源代码的封装)
  18. Atitit 团队工具链体系打造---开发方面提升效率的软件与技术体系 attilax总结.docx
  19. android camera无预览拍照 后台拍照
  20. 视频播放的时候不拦截OK键

热门文章

  1. 关于HTML的一些知识
  2. python版亲戚关系计算器
  3. #include<intrins.h>中包含的函数说明
  4. 黑白照片如何变彩色?建议收藏这些方法
  5. ubuntu server 14.04 编译安装xen4.4.2配置vtpm(三)——创建DomU(a PV VM)
  6. 手机CPU与电脑CPU性能究竟相差多少?
  7. 国密sm2 js加密后台解密,sm3 js、后台加密,sm4 后台加密
  8. 电脑重启后自带键盘失灵而外接键盘有用的一种情况
  9. python打开各种文件格式_使用python读取数据科学最常用的文件格式(转)
  10. DiskGenius安装教程