阅读目录

strip简介

strip经常用来去除目标文件中的一些符号表、调试符号表信息,以减小静态库、动态库和程序的大小。

strip支持的选项可通过如下命令查看:

strip --help

strip示例

有如下test.c文件

//test.c

#include

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_used

w _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_handle

w __gmon_start__

0000000000600e24 d __init_array_end

0000000000600e24 d __init_array_start

0000000000400570 T __libc_csu_fini

00000000004004e0 T __libc_csu_init

U __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命令用法

程序开发是否要strip

strip可以压缩目标文件、静态库、动态库、可执行程序的大小,但是会失去符号表、调试符号表信息。为了方便定位问题(比如定位 core dump问题), 建议, 尽量不要strip, 除非存储紧张。

在实际的开发中, 若需要对动态库.so进行strip操作, 减少占地空间。 通常的做法是: strip前的库用来调试, strip后的库用来实际发布, 他们两者有对应关系。 一旦发布的strip后的库出了问题, 就可以找对应的未strip的库来定位。

参考资料

mayue_csdn

发布了60 篇原创文章 · 获赞 43 · 访问量 7万+

私信

关注

标签:__,gcc,strip,mayueadd,linux,mayue,out

来源: https://blog.csdn.net/mayue_web/article/details/104001392

linux strip作用,linux gcc strip命令简介相关推荐

  1. Linux | 编译原理、gcc的命令参数、自动化构建工具 make/Makefile

    文章目录 编译原理 预处理 编译 汇编 链接 gcc的常用命令参数 make 和 Makefile 的概念 make的运行 通配符 自动化变量 伪目标.PHONE:[命令] 编译原理 在解释 make ...

  2. Linux内核日志查看之dmesg命令简介

    简介 dmesg is used to examine or control the kernel ring buffer. The default action is to display all ...

  3. linux modprobe 内核模块加载卸载命令 简介

    说明 modprobe(module probe) 功能说明:自动处理可载入模块. 语 法:modprobe [-acdlrtvV][--help][模块文件][符号名称 = 符号值] 补充说明:mo ...

  4. Linux locate 作用,linux中的locate命令的详细解释

    linxu下的locate命令可以在搜寻数据库时快速找到档案,是个很方便的命令.下面由学习啦小编为大家整理了linux的locate命令的详细解释的相关知识,希望对大家有帮助! 一.linux中的lo ...

  5. linux 正则表达式 作用,Linux 正则表达式使用简介

    正则表达式基本介绍 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 正则表达式的基本元素包括普通字符和元字 ...

  6. linux acpi 作用,Linux ACPI服务ACPI 驱动体系简介

    Linux ACPI服务DSDT: DSDT 称做 Differentiated Definition Block,存在于 BIOS 中并与当前的硬件平台兼容的,提供了系统的硬件特性(例如某些设备的内 ...

  7. linux tee作用,linux tee 命令使用详解(大量实例)

    tee 功能说明:读取标准输入的数据,并将其内容输出成文件. 语 法:tee [-ai][--help][--version][文件-] 补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标 ...

  8. linux文件目录作用,linux 文件目录,及其作用

    /boot:系统启动相关的相关文件,如内核,initrd,以及grub(bootloader) /dev: 设备文件 设备文件: 块设备:随机访问,数据块 字符设备:线性访问,按字符文单位 设备号:主 ...

  9. linux dm 作用,Linux dm中minor number的管理——idr

    1. idr机制 Linux的dm中对minor number采用idr机制进行管理.idr即"ID Radix",内核中通过radix树对ID进行组织和管理,是一种将整数ID和指 ...

最新文章

  1. 从面试官角度观察到的程序员工资瓶颈,同时给出突破瓶颈的建议
  2. UVa1374 Power Calculus(IDDFS)
  3. python 创建空的numpy数组_Numpy入门教程:01. 数组的创建与属性
  4. android官方架构组件,Android 架构组件官方文档01——LifeCycle
  5. 工业以太网交换机品牌排行榜,国产工业交换机哪个品牌好?
  6. 老板怒了,“我们赚钱你们花钱,还总出毛病!”
  7. C#利用NI VAS采集图片
  8. jquery学习之路jquery之一:jquery选择元素的方法,太神了 2012.8.2
  9. oracle dblink使用
  10. django模板层 (标签,过滤器,自定义inclusion_tag,模板的继承与导入)
  11. (vc)分享一个读写ini文件的类,支持多种数据类型的读写,二进制数据都能保存和读取...
  12. 一年前端的迷惑,深度还是广度
  13. 【KITTI】KITTI数据集简介(一) — 激光雷达数据
  14. java计算机毕业设计基于web旅游网站的设计与实现源码+数据库+系统+lw文档+mybatis+运行部署
  15. 机器人学习-matlab四足机器人控制仿真
  16. 【图像加密】基于多种混沌序列Logistic+Tent+Kent+Hent实现图像加密与解密含Matlab源码
  17. python mysql就业情况_影响员工离职因素分析—Mysql/python
  18. cad文档服务器部署,云服务器安装cad
  19. Seurat | 强烈建议收藏的单细胞分析标准流程(SCTransform normalization)(四)
  20. sort() 函数的用法

热门文章

  1. 判断两个String类型的是s1,s2是否相等?
  2. NLP十大Baseline论文简述(一) - Word2vec
  3. 跟着老陈学嵌入式-C语言入门之类Linux编译环境搭建
  4. 支付宝当面付打shang系统源码分享
  5. 关闭centos7下哔哔声
  6. TYPORA的使用手册
  7. 有网络时yum无法安装,报错:Loading mirror speeds from cached hostfile
  8. [重庆思庄每日技术分享]-oracle11g到ORACLE 816的dblink访问报 ORA-03150错误
  9. 国产智能AI对话:技术狂潮之下,要有梦元宇宙正在改变世界
  10. MPU6050的原理讲解