linux strip作用,linux gcc strip命令简介
阅读目录
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命令简介相关推荐
- Linux | 编译原理、gcc的命令参数、自动化构建工具 make/Makefile
文章目录 编译原理 预处理 编译 汇编 链接 gcc的常用命令参数 make 和 Makefile 的概念 make的运行 通配符 自动化变量 伪目标.PHONE:[命令] 编译原理 在解释 make ...
- Linux内核日志查看之dmesg命令简介
简介 dmesg is used to examine or control the kernel ring buffer. The default action is to display all ...
- linux modprobe 内核模块加载卸载命令 简介
说明 modprobe(module probe) 功能说明:自动处理可载入模块. 语 法:modprobe [-acdlrtvV][--help][模块文件][符号名称 = 符号值] 补充说明:mo ...
- Linux locate 作用,linux中的locate命令的详细解释
linxu下的locate命令可以在搜寻数据库时快速找到档案,是个很方便的命令.下面由学习啦小编为大家整理了linux的locate命令的详细解释的相关知识,希望对大家有帮助! 一.linux中的lo ...
- linux 正则表达式 作用,Linux 正则表达式使用简介
正则表达式基本介绍 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 正则表达式的基本元素包括普通字符和元字 ...
- linux acpi 作用,Linux ACPI服务ACPI 驱动体系简介
Linux ACPI服务DSDT: DSDT 称做 Differentiated Definition Block,存在于 BIOS 中并与当前的硬件平台兼容的,提供了系统的硬件特性(例如某些设备的内 ...
- linux tee作用,linux tee 命令使用详解(大量实例)
tee 功能说明:读取标准输入的数据,并将其内容输出成文件. 语 法:tee [-ai][--help][--version][文件-] 补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标 ...
- linux文件目录作用,linux 文件目录,及其作用
/boot:系统启动相关的相关文件,如内核,initrd,以及grub(bootloader) /dev: 设备文件 设备文件: 块设备:随机访问,数据块 字符设备:线性访问,按字符文单位 设备号:主 ...
- linux dm 作用,Linux dm中minor number的管理——idr
1. idr机制 Linux的dm中对minor number采用idr机制进行管理.idr即"ID Radix",内核中通过radix树对ID进行组织和管理,是一种将整数ID和指 ...
最新文章
- 从面试官角度观察到的程序员工资瓶颈,同时给出突破瓶颈的建议
- UVa1374 Power Calculus(IDDFS)
- python 创建空的numpy数组_Numpy入门教程:01. 数组的创建与属性
- android官方架构组件,Android 架构组件官方文档01——LifeCycle
- 工业以太网交换机品牌排行榜,国产工业交换机哪个品牌好?
- 老板怒了,“我们赚钱你们花钱,还总出毛病!”
- C#利用NI VAS采集图片
- jquery学习之路jquery之一:jquery选择元素的方法,太神了 2012.8.2
- oracle dblink使用
- django模板层 (标签,过滤器,自定义inclusion_tag,模板的继承与导入)
- (vc)分享一个读写ini文件的类,支持多种数据类型的读写,二进制数据都能保存和读取...
- 一年前端的迷惑,深度还是广度
- 【KITTI】KITTI数据集简介(一) — 激光雷达数据
- java计算机毕业设计基于web旅游网站的设计与实现源码+数据库+系统+lw文档+mybatis+运行部署
- 机器人学习-matlab四足机器人控制仿真
- 【图像加密】基于多种混沌序列Logistic+Tent+Kent+Hent实现图像加密与解密含Matlab源码
- python mysql就业情况_影响员工离职因素分析—Mysql/python
- cad文档服务器部署,云服务器安装cad
- Seurat | 强烈建议收藏的单细胞分析标准流程(SCTransform normalization)(四)
- sort() 函数的用法
热门文章
- 判断两个String类型的是s1,s2是否相等?
- NLP十大Baseline论文简述(一) - Word2vec
- 跟着老陈学嵌入式-C语言入门之类Linux编译环境搭建
- 支付宝当面付打shang系统源码分享
- 关闭centos7下哔哔声
- TYPORA的使用手册
- 有网络时yum无法安装,报错:Loading mirror speeds from cached hostfile
- [重庆思庄每日技术分享]-oracle11g到ORACLE 816的dblink访问报 ORA-03150错误
- 国产智能AI对话:技术狂潮之下,要有梦元宇宙正在改变世界
- MPU6050的原理讲解