GNUbinutils工具使用

GNUbinutils工具使用

ID:40561155

大小:54.00 KB

页数:6页

时间:2019-08-04

GNUbinutils工具使用_第1页
GNUbinutils工具使用_第2页
GNUbinutils工具使用_第3页
GNUbinutils工具使用_第4页
GNUbinutils工具使用_第5页
资源描述:

《GNUbinutils工具使用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、GNUbinutils工具使用来源:ChinaUnix博客 日期:2007.08.0708:45 (共有0条评论)我要评论GNUbinutils工具使用GNUbinutils是一组二进制工具集。包括:addr2lineargprofnmobjcopyobjdumpranlibsizestringsstrip.本文归纳他们的常用法。arar用于建立、修改、提取档案文件(archive)。archive是一个包含多个被包含文件的单一文件(也称之为库文件),其结构保证了可以从中检索并得到原始的被包含文件(称之为archive中的member)。m

2、ember的原始文件内容、模式(权限)、时间戳、所有着和组等属性都被保存在archive中。member被提取后,他们的属性被恢复到初始状态。ar主要用于创建C库文件(关于.o目标文件的生成和共享库的详细介绍,参考gcc笔记创建静态库(1)生成目标文件:)$gcc-Wall-cfile1.cfile2.cfile3.c不用指定生成.o文件名(默认生成file1.o,file2.o,file3.o)。(2)从.o目标文件创建静态连接库:$arrvlibNAME.afile1.ofile2.ofile3.oar生成了libNAME.a库,并列出

3、库中的文件。r:将flie1.o,file2,o,file3.o插入archive,如故原先archive中已经存在某文件,则先将该文件删除。v:显示ar操作的附加信息(如被处理的member文件名)注:对于BSD系统,还需要在创建静态库之后创建索引:$ranliblibNAME.aLinux中不需要这一步(运行它也是无害的).创建动态库(利用gcc,未用ar)(1)生成目标文件$gcc-Wall-c-fpicfile1.cfile2.cfile3.c-fpic:指定生成的.o目标文件可被重定址.pic是positionidependent

4、code的缩写:位置无关代码.(2)生成动态库文件$gcc-shared-olibNAME.sofile1.ofile2.ofile3.o一般地,连接器使用main()函数作为程序入口.但在动态共享库中没有这样的入口.所以就要指定-shared选项来避免编译器显示出错信息.实际上,上述的两条命令可以合并为下面这条:$gcc-Wall-shared-fpic-olibNAME.sofile1.cfile2.cfile3.c此后,将main函数所在的程序与libNAME.so连接(注意库连接路径和头文件包含路径,以及连接顺序!参考gcc笔记)至

5、此,与动态库连接的函数编译成了一个可执行文件。貌似成功了,但还差最后一步。如果直接运行该程序,会给出这样的错误信息:errorwhileloadingsharedlibraries:libhello.so:cannotopensharedobjectfile:Nosuchfileordirectory这是因为与动态库连接的程序在运行时,首先将该动态库加载到内存中,而gcc默认加载动态库文件所在目录为/usr/local/lib,/usr/lib。刚才的程序虽然能编译成功,但如果我们自己建立的动态库没有位于默认目录中,则执行时会应为无法找到它

6、而失败。解决办法:改变加载路径对应的环境变量,然后再执行。exportLD_LIBRARY_PATH=动态库所在目录:$LD_LIBRARY_PATH查看archive内容$artvarchiveNAMEt:显示archive中member的内容,若不指定member,则列出所有。v:与t结合使用时,显示member的详细信息。要想进了解ar的详细选项,参考ar的on-linemanualnmnm用来列出目标文件中的符号,可以帮助程序员定位和分析执行程序和目标文件中的符号信息和它的属性。如果没有目标文件作为参数传递给nm,nm假定目标文件为

7、a.out.这里用一个简单的示例程序来介绍nm的用法:main.c:intmain(intargc,char*argv[]){hello();bye();return0;}hello.c:voidhello(void){printf("hello!");}bye.c:voidbye(void){printf("goodbye!");}运行下列命令:$gcc-Wall-cmain.chello.cbye.cgcc生成main.o,hello.o,bye.o三个目标文件(这里没有声明函数原型,加了-Wall,gcc会给出警告)$nmma

8、in.ohello.obye.o结果显示如下:main.o:UbyeUhello00000000Tmainhello.o:00000000ThelloUputsbye.o:000

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。