【file命令not stripped】

UNIX下*.o和*.so文件显示的stripped和not stripped是什么意思?

表示符号表是否被清除.

在centos 6.2下用file命令查看文件信息的时候,显示如下:
libcom_err.so.2:      ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped

libcrypto.so.10:      ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped

libcrypt.so.1:        ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

libc.so.6:            ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

libdl.so.2:           ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
第一个最后显示的是stripped,第二个是not stripped。而且对于同样名字的动态库,带not stripped库会大很多。

所以由此想到会不会类似于gcc编译的时候加上调试信息的形式呢?
至少乍一看,对于这个名词都不是很懂,百度翻译了一下也不好用,那么到底是什么意思呢?
在一篇“elf文件格式与动态链接库”的博客里我们可以找到答案。
a.out和elf(Executable and Linking Format)。这两种格式中都有符号表(symbol table),其中包括所有的符号(程序的入口点还有变量的地址等等)。在elf格式中符号表的内容会比a.out格式的丰富的多。但是这些符号表可以用 strip工具去除,这样的话这个文件就无法让debug程序跟踪了,但是会生成比较小的可执行文件。a.out文件中的符号表可以被完全去除,但是 elf中的在加载运行时起着重要的作用,所以用strip永远不可能完全去除elf格式文件中的符号表。但是用strip命令不是完全安全的,比如对未连接的目标文件来说如果用strip去掉符号表的话,会导致连接器无法连接。

例如:

代码:

$:gcc -c hello.c

$:ls hello.c hello.o

用gcc把hello.c编译成目标文件hello.o

代码:

$:strip hello.o

用strip去掉hello.o中的符号信息。

代码:

$:gcc hello.o /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o –o hello

/*

$:gcc hello.o /usr/lib/gcc/i686-pc-linux-gnu/3.4.5/../../../crt1.o7

: In function `_start'

: init.c: (.text+0x18)

: undefined reference to `main' collect2

: ld returned 1 exit status

*/

再用gcc连接时,连接器ld报错。说明在目标文件中的符号起着很重要的作用,如果要发布二进制的程序的话,在debug后为了减小可执行文件的大小,可以用strip来除去符号信息但是在程序的调试阶段还是不要用strip为好。

到此前面遇到的问题基本上也大概明白了。
--------------------- 
作者:bitsjx 
来源:CSDN 
原文:https://blog.csdn.net/bitsjx/article/details/7454805 
版权声明:本文为博主原创文章,转载请附上博文链接!

linux 动态库文件stripped属性理解相关推荐

  1. linux 动态库文件stripped属性理解(转)

    在centos 6.2下用file命令查看文件信息的时候,显示如下: libcom_err.so.2: ELF 64-bit LSB shared object, x86-64, version 1 ...

  2. linux动态库文件.so为什么有多个版本号?(多个名字)(小版本升级)

    如图,我编译ffmpeg后发现同一个库文件有很多不同版本号后缀 这是因为有时软件会小版本升级,为了避免小版本升级后找不到库了,所以才设置了另外两个链接文件,但其实指向的都是最后文件名长的那个文件 图中 ...

  3. 【转】matlab与C/C++混合编程——在Windows/Linux上调用Matlab编译的动态库文件

    转自:matlab与C/C++混合编程--在Windows/Linux上调用Matlab编译的动态库文件_sinat_18131557的博客-CSDN博客 date version comments ...

  4. Java使用opencv调用微信扫描二维码引擎,附带windows和linux需要的动态库文件

    前言 最近公司项目有一个需求,要用二维码传递数据.于是使用了zxing生成和解析二维码,但是zxing扫描二维码原图还可以,一旦扫描用户使用手机拍摄的二维码,识别率急剧下降.尝试了对拍摄的照片进行降噪 ...

  5. Linux 动态库和静态库

    From:http://blog.csdn.net/u010977122/article/details/52958330 From:http://blog.163.com/xychenbaihu@y ...

  6. linux 动态库和静态库分析实例

    今天忙着编译库文件,中间遇到不少问题,看到这篇文章不错,就转载过来了,后面我会整理下今天的问题,从网上下载了一个开源库,如何进行编译,如何加载到我们的工程中. 今天我们主要来说说Linux系统下基于动 ...

  7. 分析Windows和Linux动态库

    摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理.但不同操作系 ...

  8. Windows和Linux动态库比较 (Zhuan)

    Windows和Linux动态库比较 Description: 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库 可以有效的减少程序大小,节 ...

  9. *nix下部署第三方动态库文件

    最近写的一些程序经常需要放到不同的机器上执行,就做了一些工作,减少配置环境的时间,尽量做到从代码库里check out代码到本地就可以直接执行(或者make一次之后执行).或者说,花了一点时间把程序做 ...

最新文章

  1. mysqlselectdb php_PHP MySQL Select(数据库查询)
  2. 台湾炸鸡连锁店供应过期肉品 工厂停业违规品下架
  3. VS2013 越来越慢
  4. OpenCV图像增强(二)——Retinex图像增强
  5. Serverless在编程教育中的实践
  6. 硬盘结构及硬盘错误的解决方法(一)
  7. JavaMail中解决中文附件名乱码的问题
  8. gets函数会自动加空字符吗_Python高手都知道的内置函数,你不知道就low了
  9. java中菜单不显示_菜单不显示
  10. 坐标轨迹计算_三坐标测量机控制系统功能介绍
  11. Es6语法实现的转盘抽奖效果——可配置转盘的抽奖概率
  12. office2010c盘_安装office2010一半时取消导致C盘空间少了将近8个G,卸载office后C盘内存没有变回来,有谁知道怎么办吗?...
  13. 安装cude11.2.exe报错:Could not create file “C: )Users\xxx\ AppData \Local\ Temp \CUDA\GFExperience
  14. 游戏开发核心技术之-存档与读档(1)
  15. bouncing results问题
  16. matlab怎么把音频变成信号_利用MATLAB软件对音频信号进行频谱分析及处理.doc
  17. wamp mysql_WampServer 下载以及安装问题 以及配置远程连接MYSQL
  18. 碰撞、子弹路径、参考
  19. 首届中阳验方节即将举办,失传多年的国宝级验方重见天日
  20. git+小乌龟安装教程。。

热门文章

  1. PPT形状的多种玩法
  2. 2018年北航计算机学院推免夏令营经验
  3. JAVA线程 -- 线程状态
  4. systemctl的常用命令和使用说明
  5. C++ 函数的递归调用
  6. 跨境支付行业洗牌在即:本月底必须登记 支付机构不得再“借牌照”
  7. Linux管道初步了解
  8. extern 详细用法
  9. MATLAB与SolidWorks联合仿真(1)
  10. MySQL数据库学习笔记(2)