当前位置:  技术问答>linux和unix

strip对动态库文件(.so)和静态库文件(.a)的不同效果?

    来源: 互联网  发布时间:2016-12-06

    本文导语:  根据strip的功能表示,strip经常用来去除目标文件中的一些符号表、调试符号表信息,减少包的大小. 我自己做了一函数库,同样的代码生成了一个mylib.so和一个mylib.a文件,之后使用了 strip mylib.so 和 strip mylib.a 这两条命...

根据strip的功能表示,strip经常用来去除目标文件中的一些符号表、调试符号表信息,减少包的大小.
我自己做了一函数库,同样的代码生成了一个mylib.so和一个mylib.a文件,之后使用了 strip mylib.so 和
strip mylib.a 这两条命令去除一些符号表和调试符号表信息, 感觉这两个库文件的体积大小确实缩小了,
使用 nm 命令也不会输出这两个库文件的符号清单.
比较怪异的是我分别使用这两个去掉了符号信息的库文件时,效果竟然不一样。
gcc -o ta  test.c  mylib.a  和 gcc -o tso test.c  -L. -lmylib.so 我连接动态库文件时,编译可以通过,
使用静态库文件时,报告错误,在mylib.a中实现的函数找不到。如果不对mylib.a文件进行strip命令的话,
编译可以通过,一切正常。
  关于这个问题,想请教一下各位,发布静态库文件(.a)时,是否有需要使用strip命令去掉了所有的符号列表信息?
有没有什么方法保证使用strip命令后也能正常使用该静态库文件? 为什么对so文件使用了strip命令后不会影响它
和测试程序的链接?而且对静态库文件就会链接不成功?



 
 

|
out 文件中间有bss、data、text 等段、里面对应定义了某型函数、并且对应某些函数实现对应所在的地址 等等。如果strip了就消除了中间的间隔等,使得所对应的地址找不到函数实现了,所以就存在编译的时候该函数找不到。而so 全部不一样 可以strip

|
对应 *.o *.a 加参数. 不给参数的话当日会出事了。
       -g
       -S
       -d
       --strip-debug
           Remove debugging symbols only.

       --strip-unneeded
           Remove all symbols that are not needed for relocation processing.


因为*.o 是relocatable ELF文件。 *.a 算是*.o的集合。所以最多是使用--strip-unneeded参数,符号不能删除的太彻底。

 file dio dio.o 
dio:   ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

dio.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

|
静态库不要使用strip

|
静态库在被链接到可执行文件以后strip就行了

|
对于动态库,strip之后可以编译通过,能否成功运行?

|
.a库还是不要strip,最终strip可执行文件就ok了

|
编译时候连接的动态库是strip过的吗?
运行时,运行环境中的动态库是strip过的吗?


不是很懂,占位学习

|
学习了,以前还真不知道strip不能用于静态库。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.util.jar接口pack200.packer的类成员方法: strip定义及介绍
  • stripped 、 not stripped分别是什么意思?
  • php使用strip_tags从字符串中去除html标记
  • jQuery 响应式灯箱效应 Strip
  • arm-linux-strip怎么安装
  • python strip()函数 介绍
  • PHP strip_tags()去除HTML、XML以及PHP的标签介绍
  • PHP strip_tags()去除HTML、XML与PHP标签
  • Python strip lstrip rstrip使用方法
  • 怎么把一个static library里的一个globe的symbol给strip或hide掉?
  • PHP strip_tags保留多个HTML标签
  • PHP函数strip_tags的一个bug浅析
  • PHP关于htmlspecialchars、strip_tags、addslashes的解释
  • php去除html标记strip_tags、htmlspecialchars区别
  • PHP函数strip_tags(去除html)的bug


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3