标题:
Mips GNU工具链简介(2)
[打印本页]
作者:
yuyang911220
时间:
2015-11-22 19:29
标题:
Mips GNU工具链简介(2)
mips-linux-gnu-ranlib:
这又是一个历史遗留问题,在早期版本中,
ar
只是将
.o
打包到
.a,
而不处理里边的符号表,
linker
需要一个完整的符号表,所以当时就单独写了一个
ranlib
来产生
linker
需要的符号表。
后来产生完整符号表的功能被集成到
ar
中了,为了兼容,故
ranlib
还存在,总之以后尽量不要使用
ranlib
。
生成完整符号表的方法
:
Mips-linux-gnu-ranlib libtest.a
mips-linux-gnu-nm:
nm
的主要功能是列出目标文件中的符号,这样就可以定位和分析执行程序和目标文件中的符号信息和它的属性。
生成符号前缀的含义
:
A
:符号的值是绝对值,并且不会被将来的链接所改变
B
:符号位于未初始化数据部分(
BSS
段)
C
:符号是公共的。公共符号是未初始化的数据。在链接时,多个公共符号可能以相同的名字出现。如果符号在其他地方被定义,则该文件中的这个符号会被当作引用来处理
D
:符号位于已初始化的数据部分
T
:符号位于代码部分
U
:符号未被定义
?:符号类型未知,或者目标文件格式特殊
使用方法
:
Mips-linux-gnu-nm –A libtest.a
mips-linux-gnu-gcov:
gcov
会监视一个程序的执行,并且会标识出执行了哪一行源码,哪一行没有执行。更进一步,
gcov
可以标识出某一行源执行的次数,这对于执行配置很有用(程序在哪里花费了大多数的时间)
gcov
的参数
:
-b,-branch-probabilities
向输出文件输出分支频度
-c,-branch-counts
打印分支计数而不是分支频度
-n,-no-output
不创建
gcov
输出文件
-l,-long-file-names
创建长文件名
-f,-function-summaries
打印每一个函数的概要
-o,-object-directory .bb,.bbg,.da
文件存放的目录
Gcov
实例
(
使用的
gcc
测试
):
Mips-linux-gnu-gcc a.c -o a -ftesage -fprofile-arcs
./a
执行
a
文件
//
Mips-linux-gnu-gcov a.c //
会自动生成
a.c.gcov
文件
File 'a.c'
Lines executed:83.33% of 6
a.c:creating 'a.c.gcov'
vi a.c.gcov
//
就可以看到代码的执行次数
mips-linux-gnu-gcov –b a.c
//
可以查看
gcov
的分支执行频率
mips-linux-gnu-c++filt:
大家都知道在
C++
和
JAVA
中都有函数重载的机制,编译器在编译相同重载函数时,会使用
name mangling
机制对函数重新命名,而链接器连接的时候就需要对此进行解析。
C++filt
常用参数
:
-_
滤掉符号前的下划线
-j
使用
Java
语法,默认为
C++
-n
不要滤掉符号前的下划线
-p
不要打印函数的参数类型
-s
指定解码方式,不同编译器的编码方式不同。
C++filt
使用实例
:
dyron@harris-desktop:~/misc/module/test/tmp$ mips-linux-gnu-nm filt | grep func
080484d8 T _Z4funci
080484c4 T _Z4funcv
dyron@harris-desktop:~/misc/module/test/tmp$ mips-linux-gnu-nm filt | grep func | mips-linux-gnu-c++filt
080484d8 T func(int)
080484c4 T func()
mips-linux-gnu-strip:
strip
经常用来去除目标文件中的一些符号表、调试符号表信息,以减小程序的
大小,在
rpmbuild
包的最后就用到。
值得注意的是,在动态库和静态库时去掉符号表可以给文件瘦身,但再链接时可能编译不过去,所以
strip
慎用。
Strip
使用实例
:
dyron@harris-desktop:~/misc/module/test/tmp$ ls -l filt
-rwxr-xr-x 1 dyron dyron 7311 2011-08-31 10:29 filt
dyron@harris-desktop:~/misc/module/test/tmp$ mips-linux-gnu-strip filt
dyron@harris-desktop:~/misc/module/test/tmp$ ls -l filt
-rwxr-xr-x 1 dyron dyron 5552 2011-08-31 10:55 filt
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0