zoukankan      html  css  js  c++  java
  • linux 动态库文件stripped属性理解

    【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
    版权声明:本文为博主原创文章,转载请附上博文链接!

    相关链接:

    stripped 和 not stripped - 沉淀 - CSDN博客  https://blog.csdn.net/panfengsoftware/article/details/7775108

  • 相关阅读:
    nginx+ftp图片服务器搭建
    第一篇随笔
    字符设备控制技术
    总结字符设备
    字符设备驱动模型
    使用字符设备驱动
    驱动开发前奏
    linux内核链表的移植与使用
    linux内存管理子系统
    内核模块可选信息
  • 原文地址:https://www.cnblogs.com/tongongV/p/10743984.html
Copyright © 2011-2022 走看看