裁剪可执行程序的体积strip

strip删除-g生成的程序调试连接表的信息
对于可执行文件,使用命令strip之后,
体积只有原来的九分之一
strip命令

The strip command removes the symbol table SHT_SYMTAB and its associated string table, debugging information, and line number information from ELF object files. That  is, besides the symbol table and associated string table, the following
sections are removed:
.line
.debug*
.stab*

该命令从可执行文件、动态链接库,等等,二进制文件的ELF对象文件中删除符号表SHT_SYMTAB,行号信息,调试信息,字符串表;
命令一旦执行成功,那么gdb就读不到这些文件的符号表了,也就不能进行正常的调试了;

一、下面是对可执行文件ISMG_LogServer_SOL10_GCC34_V500_090320执行strip命令前后,gdb命令对它的调试信息的变化:
strip前,用gdb工具调试:
-bash-3.00$ gdb
GNU gdb 6.2.1
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.10".
(gdb) file ISMG_LogServer_SOL10_GCC34_V500_090320
Reading symbols from /export/home1/ismg/ISMG5/bin/ISMG_LogServer_SOL10_GCC34_V500_090320...done.
(gdb)

执行strip命令:
strip ISMG_LogServer_SOL10_GCC34_V500_090320

string后,用gdb工具调试:
-bash-3.00$ gdb
GNU gdb 6.2.1
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.10".
(gdb) file ISMG_LogServer_SOL10_GCC34_V500_090320
Reading symbols from /export/home1/ismg/ISMG5/bin/ISMG_LogServer_SOL10_GCC34_V500_090320...(no debugging symbols found)...done.
(gdb)

二、下面是对可执行文件ISMG_LogServer_SOL10_GCC34_V500_090320执行strip命令前后,文件大小的变化:
strip前,文件的大小:
-bash-3.00$ ls -lt | grep LogServer
-rwxr-xr-x  1 ismg  dba  436944  3月 20日 10:39 ISMG_LogServer_SOL10_GCC34_V500_090320

执行strip命令:
strip ISMG_LogServer_SOL10_GCC34_V500_090320

strip后,文件的大小:
-bash-3.00$ ls -lt | grep LogServer
-rwxr-xr-x  1 ismg  dba  71116  3月 20日 10:40 ISMG_LogServer_SOL10_GCC34_V500_090320

裁剪可执行程序的体积strip,布布扣,bubuko.com

时间: 2024-10-12 22:57:52

裁剪可执行程序的体积strip的相关文章

Linux动态库相关知识整理

动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序, 动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执 行程序等诸多好处.作者是一个Linux后台开发,这些知识经常用到,所以 整理了一下这方面的知识.静态库相对简单,本文只关心Linux平台下的动态库. 创建动态库 这里我把一个短小却很有用的哈希函数编译成动态库做为示例,ELFhash用于对字符串做哈希,返回一个无符号整数. //elfhash.h #include <stdio.h> unsign

第46课 函数与宏分析

1. 函数与宏 (1)宏是由预处理直接替换展开的,编译器不知道宏的存在 (2)函数是由编译器直接编译的实体,调用行为由编译器决定 (3)多次使用宏会导致最终可执行程序的体积增大 (4)函数是跳转执行的,内存中只有一份函数体存在 (5)宏的效率比函数要高,因为是直接展开,无调用开销 (6)函数调用时会创建活动记录,效率不如宏 [编程实验]函数与宏 #include <stdio.h> #define RESET(p,len) while( len > 0) ((char*)p)[--len

[Erlang之旅 0008] string 常用函数

参考文档:http://www.erlang.org/erldoc?q=string%3Bright&x=-967&y=-384 string类型,经常用到,所有练习一下: 3> string:len("fan"). %% 字符串长度 3 4> string:len("你的"). 2 5> string:len("fan你的中国"). 7 6> string:equal("an",&qu

Linux下静态库与动态库

一.基本概念 1.1.什么是库        在 windows 平台和 linux 平台下都大量存在着库. 本质上来说库是一种可执行的二进制代码(但不可以独立执行),可以被操作系统载入内存执行. 由于 windows 和 linux 的平台不同(主要是编译器.汇编器和连接器 的不同),因此二者库的二进制是不兼容的. 本文仅限于介绍 linux 下的库. 1.2. 库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同: 静态库的代码在编译过程中已经被

C语言学习笔记--函数

1. C 语言中的函数 (1)函数的由来: 程序 = 数据 + 算法→C 程序 = 数据 + 函数 (2)模块化程序设计 (3)C 语言中的模块 2. 面向过程的程序设计 (1)面向过程是一种以过程为中心的编程思想 (2)首先将复杂的问题分解为一个个容易解决的问题 (3)分解过后的问题可以按照步骤一步步完成 (4)函数是面向过程在 C 语言中的体现 (5)解决问题的每个步骤可以用函数来实现 3. 声明和定义 (1)声明的意义在于告诉编译器程序单元(以下均指变量或函数)的存在 (2)定义则明确指示

linux下静态库和动态库一些东西

http://www.cnblogs.com/changefuture/archive/2011/12/22/2297460.html Linux  动态链接库和静态库示例 文件预览 文件目录树如下,如你所见,非常简单. libtest/ |-- lt.c |-- lt.h `-- test.c 代码 #lt.c /* lt.c * */ #include <stdio.h> void myprint(void) { printf("Linux library test!\n&quo

Linux 动态库相关知识整理

动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序,动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执行程序等诸多好处.作者是一个Linux后台开发,这些知识经常用到,所以整理了一下这方面的知识.静态库相对简单,本文只关心Linux平台下的动态库. 创建动态库 这里我把一个短小却很有用的哈希函数编译成动态库做为示例,ELFhash用于对字符串做哈希,返回一个无符号整数. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //elf

函数与过程

80X86上的函数/过程调用. call指令来调用过程;ret指令(return)返回调用程序.过程如下: 1)确定执行完过程后要返回的指令地址(返回/链接地址). 2)将该地址保存到已知位置. 在没有递归时,可将其放在任意位置. 放到内存中的栈是最常见的,执行过程:call->push/ret->pop 优点: 1)栈"后进先出",完全支持嵌套和递归. 2)栈在内存中可高效操作.不同过程的返回地址可重用同一内存空间. 3)频繁访问内存的栈时可以使用缓存. 4)栈也是保持活

Linux中的库

一.基本概念 1.1.什么是库        在 windows 平台和 linux 平台下都大量存在着库. 本质上来说库是一种可执行的二进制代码(但不可以独立执行),可以被操作系统载入内存执行. 由于 windows 和 linux 的平台不同(主要是编译器.汇编器和连接器 的不同),因此二者库的二进制是不兼容的. 本文仅限于介绍 linux 下的库. 1.2. 库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同: 静态库的代码在编译过程中已经被