strip经常用来去除目标文件中的一些符号表、调试符号表信息,以减小程序的大小,在rpmbuild包的最后就用到。

其支持的选项如下:

>strip -h

用法:strip 输入文件

从文件中删除符号和节

选项为:

-I --input-target=      Assume input file is in format

-O --output-target=     Create an output file in format

-F --target=            Set both input and output format to

-p --preserve-dates              Copy modified/access timestamps to the output

-R --remove-section=       Remove section from the output

-s --strip-all                   Remove all symbol and relocation information

-g -S -d --strip-debug           Remove all debugging symbols & sections

--strip-unneeded              Remove all symbols not needed by relocations

--only-keep-debug             Strip everything but the debug information

-N --strip-symbol=         Do not copy symbol

-K --keep-symbol=          Do not strip symbol

--keep-file-symbols           Do not strip file symbol(s)

-w --wildcard                    Permit wildcard in symbol comparison

-x --discard-all                 Remove all non-global symbols

-X --discard-locals              Remove any compiler-generated symbols

-v --verbose                     List all object files modified

-V --version                     Display this program's version number

-h --help                        Display this output

--info                        List object formats & architectures supported

-o                         Place stripped output into

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。

测试代码如下:

/* max.c */int max(int val1, int val2){  int iVal = (val1 > val2) ? val1 : val2;  return iVal;}

/* min.c */int min(int val1, int val2){  int iVal = (val1 < val2) ? val1 : val2;  return iVal;}

/* main.c */#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去除目标文件中符号表、调试符号表信息相关推荐

  1. 【Linux】(用户不在sudoers文件中……) 添加用户到sudoers

    [Linux](用户不在sudoers文件中--) 处理这个问题应该先理解其原理再操作 首先要明白root的密码一般用户是不应改知道的,但一般用户有时可能要用到root的一些权限. 这里就有了一个 / ...

  2. bulkwrite 批量插入_SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)

    1/首先建立数据表 CREATE TABLE BasicMsg ( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位 ...

  3. 去掉java文件中的注释_利用JavaParser去除java文件中的注释

    利用JavaParser去除java文件中的注释 个人博客:记录一下在项目实施过程中的一些点 情景回顾 之前项目有个需求,就是去掉.java文件中的所有注释,常用的方法是用正则匹配.然而在网络上查找到 ...

  4. linux篇---解决 Linux 系统,出现“不在sudoers文件中,此事将被报告”的问题

    解决 Linux 系统,出现"不在sudoers文件中,此事将被报告"的问题 我在使用个人用户(非root用户)时,在添加用户,使用sudo命令来执行的时候,需要验证当前用户的密码 ...

  5. 【办公自动化实例】使用python将多个excel文件中的多个sheet表合并到一个表内

    文章目录 一.需求 二.处理方式 三.代码实现 一.需求 将多个excel文件中的多个sheet表合并到一个工作簿内,参考例子如图: 二.处理方式 1.通过os模块遍历文件,提取获取xlsx文件的路径 ...

  6. linux 软连接 sudo ln -s 源文件 目标文件

    1.软链接就是:"ln –s 源文件 目标文件",只会在选定的位置上生成一个文件的镜像,不会占用磁盘空间,类似与windows的快捷方式. 2.硬链接ln源文件目标文件,没有参数- ...

  7. 目标文件中的几个重要的段

    今年来学习一下目标文件.那啥是目标文件呢?简单的说:目标文件就是经过编译和汇编,但没有经过没了链接的文件.看一段测试代码: #include <stdio.h>int a = 84;//已 ...

  8. 如何去除 EXCEL 文件中的重复行

    在EXCEL数据文件中,如果按某几个列值比较,值都相等的几行称为重复行,那么怎么删除多余的重复行,只留下一行? 如果数据少,只有几十行数据,那么手工删除也是可以的.而如果数据量很大,手工处理就会是很麻 ...

  9. python去除读取文件中多余的空行

    今天在写登录程序练习的时候,黑名单文件中多了几行空行.导致运行的时候报错:IndexError: list index out of range 代码 brackData = open(brackDa ...

  10. SQL SERVER 使用 OPENRORWSET(BULK)函数将txt文件中的数据批量插入表中(2)

    1/首先建立数据表 CREATE TABLE BasicMsg (IDFlag INT IDENTITY PRIMARY KEY NOT NULL, RecvTime FLOAT NOT NULL , ...

最新文章

  1. android studio快捷键大全
  2. POJ_1976 A Mini Locomotive (dp)
  3. python单元测试框架-Python unittest单元测试框架总结
  4. AUTHORITY-CHECK常用事务代码
  5. 实验0-Hive配置与启动
  6. 【LeetCode笔记】剑指 Offer 03. 数组中重复的数字(Java、哈希表、原地算法)
  7. 10倍,BoostKit鲲鹏全局缓存3大创新技术助力Ceph性能提升
  8. 处理顶点——使用顶点缓冲和索引缓冲将顶点和索引保存在显存中
  9. ASP.NET 服务端GZIP压缩
  10. 使用ILSpy查看dll里的部分代码
  11. AppScan安装使用
  12. 软件、硬件、模拟器,盘点九大机器人开源项目
  13. 离散数据编码方式总结(OneHotEncoder、LabelEncoder、OrdinalEncoder、get_dummies、DictVectorizer、to_categorical的区别?)
  14. 某宝抢购taobaosnap开发与实现
  15. 负载均衡器和代理服务器
  16. 抗疫先锋 | IBM:同心抗疫,重塑未来 - emerge smarter!
  17. 有哪些网站,一旦知道,你就离不开了?
  18. 编程语言培训学哪个?
  19. PNETlab最新版介绍与下载
  20. 如何正确选择ESD二极管,参考这几点!

热门文章

  1. LocalDate获取每周第一天
  2. 2022黑马程序员Java学习路线图
  3. 微信小程序开发(2)—— 简单的页面登陆实现
  4. 概率图模型-原理与技术 第二章 基础知识 学习笔记
  5. 前端如何播放m3u8格式的视频
  6. 5G NR PUSCH non-codebook SRS/DMRS
  7. 3 二十五项反措--防止电气误操作及机组上电事故
  8. 深入理解JVM - 系统性能优化
  9. 人脸识别接口_人脸识别双目摄像头模组应用系统
  10. MobileNet_V3—SSD网络模型图文详解