linux 动态库文件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.outelfExecutable 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

gcchello.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为好。

到此前面遇到的问题基本上也大概明白了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab gradient

gradient函数 >> x[6,9,3,4,0;5,4,1,2,5;6,7,7,8,0;7,8,9,10,0]x 6 9 3 4 0 5 4 1 2 5 6 7 7 8 0 7 8 9 10 0 >> [Fx,Fy]gradient(x) Fx 3.0000 -1.5000 -2.5000 -1.5000…

第六章 传输层

思维导图: 一、 概述 与数据链路层关系 提供可靠的、高效的、性价比高的数据传输输出实体 传输层利用网络层的服务,为它的上层应用层提供服务 网络层与传输层不同点: 网络层运行在由承运商操作的路由器上,因此用户无法真正控制到网…

Kanvas:从您的ANTLR语法生成一个简单的IDE

什么是编辑器? 对我来说,编辑器是我工作中使用的主要工具。 作为语言工程师,我创建新的语言,使用现有的语言,并且需要其他工具来使用它们。 我希望能够在一个定制的IDE中将所有这些黑客一起入侵,我可以为我…

函数名/函数地址/函数指针

转自:http://hi.baidu.com/%C6%BF%D6%D0%B5%C4%C5%AE%CE%D7/blog/item/387db9ddaa54d0a9cd1166fa.html 函数指针:1。指针变量 2。指针变量指向函数 这正如用指针变量可指向整型变量、字符型、数组一样。 在编译时,每一个函数都有一个入口地址…

matlab imaqhwinfo

使用imaqhwinfo函数,来获取电脑上安装的摄像头的名称,比如winvideo,之后可以利用imaqhwinfo(winvideo)来进一步获取设备ID等边信息,这在之后的视频流获取中会用到。获取设备ID之后(比如ID为1),可…

第二次作业--熟悉使用工具

GIT地址 https://github.com/ForeveruxGIT用户名 Foreverux学号后五位 62117博客地址 https://www.cnblogs.com/JQloveJX/ 作业链接 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2793声明:部分内容摘自ChildishChange Part 0. 背景 阿…

什么是javax.ws.rs.core.context? [ 第2部分 ]

如何使用Context批注 在什么是javax.ws.rs.core.context? 您学习了如何使用Context批注从HttpHeaders类的注入实例中检索HTTP标头信息,以及如何从UriInfo实例中检索URI信息,例如URI参数和变量。 在本文中,您将学习如何将Context批…

【题解】Luogu P2347 砝码称重

正经DP题解 一道非常好的背包练手题( sto(注:原思路来源 SLYZ_0120 的题解)orz 开始这道题 1.输入六个数,存进数组中 2.初始化 f 数组为0。 f [ i ] 表示重量为 i 的情况是否出现过(下面代码使用的是 int 数…

matlab 获取视频图像的信息

获取视频图像的信息可以通过get函数来获取,如get(vid)或者get(getselectedsource(vid))。使用set函数可以设置摄像头获取的图像的一些属性值,也可以直接使用结构数组的“点”来赋值,比如,要持续通过摄像头获取图像,则可…

tomcat使用ssl_使用SSL和Spring Security保护Tomcat应用程序的安全

tomcat使用ssl如果您看过我的上一个博客,您会知道我列出了Spring Security可以做的十件事 。 但是,在开始认真使用Spring Security之前,您真正要做的第一件事就是确保您的Web应用使用正确的传输协议,在这种情况下为HTTPS –毕竟&a…

matlab delete、clf、cla、close、closereq删除对象

matlab中删除对象 删除对象 (1)delete:删除文件或对象图形 删除文件对象h的格式为:delete(filename)或delete filename 删除图形对象h的格式为:delete(h); 若要无条件删除所有的图形对象,则:set…

Linux系统调用过程分析

参考: 《Linux内核设计与实现》 0 摘要 linux的系统调用过程: 层次如下: 用户程序------>C库(即API):INT 0x80 ----->system_call------->系统调用服务例程-------->内核程序 先说明一下&#…

Spring Boot和应用程序上下文层次结构

Spring Boot支持一种指定Spring应用程序上下文层次结构的简单方法。 这篇文章只是演示了此功能,我尚未在我从事的项目中很好地使用它。 Spring Cloud使用此功能来创建引导上下文 ,在该上下文中,如果需要,可以从外部配置服务器加载…

drf 解析器,响应器,路由控制

解析器 作用: 根据请求头 content-type 选择对应的解析器对请求体内容进行处理。 有application/json,x-www-form-urlencoded,form-data等格式使用:局部使用:from rest_framework.parsers import JSONParser,FormParseparser_classes [JSONParser, ]全局…

matlab max与min获取矩阵最大最小值函数

1.matlab中Max的用法1(Min类似) Matlab中max函数在矩阵中求函数大小的实例如下: C max(A) 1)返回一个数组各不同维中的最大元素。 2)如果A是一个向量,max(A)返回A中的最大元素。 3)如果A是一个矩阵&…

shell中exec解析

参考:《linux命令、编辑器与shell编程》 《unix环境高级编程》exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类:外部命…

今天敢用OSS放视频,明天阿里云就敢收你房子

关注卢松松,会经常给你分享一些我的经验和观点。 请教各位大佬:如果网站里,视频多的话,有什么加速的办法,使用CDN可以嘛? 今天群友king王咨询了这个问题:他的客户网站在美国,用美国节点的服务…

matlab meshgrid

meshgrid用于从数组a和b产生网格。生成的网格矩阵A和B大小是相同的。它也可以是更高维的。 用法: [A,B]Meshgrid(a,b) 生成size(b)Xsize(a)大小的矩阵A和B。它相当于a从一行重复增加到size(b)行,把b转置成一列再重复增加到size(a)列。因此命令等效于: …

连续锁定2个不同的锁会死锁_研究死锁–第5部分:使用显式锁定

连续锁定2个不同的锁会死锁在我的上一个博客中,我研究了使用Java的传统synchronized关键字和锁排序来修复破碎的,死锁的余额转移示例代码。 但是,有另一种方法称为显式锁定。 在这里,将锁定机制称为显式而非隐式的想法是&#xf…

fork source exec区别差异

fork 使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process, 但 parent process 的环境是不会因 child process 的改变而改变的. source 使用 source 方式运行 scrip…