2012-12-04 32 views
1

我正在编译我的库(C编程),使用Suse gcc编译器,然后我生成该库的报告nm。我必须将nm报告与以前的版本库进行比较,以检查当前版本库中是否存在这些符号。在nm报表中验证符号更改的简单方法

nm libxxx0.1.a > nm_0.1.txt 
nm libxxx0.2.a > nm_0.2.txt 

现在我只是比较nm_0.1.txtnm_0.2.txt文件与一些文本比较工具。除了那些符号差异之外,我也得到了抵消差异。我不担心抵消差异。

是否有任何命令(在windows或suse中)可以轻松地突出显示nm报告中的符号差异。

注意:生成的nm报告将会非常大。手动打开该文本文件并使用某种工具删除该nm报告的第一列对于该nm nm文件来说并非易事。

+0

对于SUSE,看看'diff'('man diff')。 –

+0

通过unix ['cut'](http://ss64.com/bash/cut.html)命令删除第一列? – BoBTFish

+0

其实,'cut'在这里播放的不好,因为第一列可以是空白的。也许'nm lib.a | sed's /.* [a-Z] \(。* \)/ \ 1 /'> symbols.txt' – BoBTFish

回答

3

这是针对Linux的。首先必须准备和整理你的纳米输出

nm -g libxxx0.1.a | awk '{print $3}' | sort -u >nm_0.1.txt 
nm -g libxxx0.2.a | awk '{print $3}' | sort -u >nm_0.2.txt 

如果您有兴趣所有符号,离开了-g和使用cut代替awk

nm libxxx0.1.a | cut -c20- | sort -u >nm_0.1.txt 
nm libxxx0.2.a | cut -c20- | sort -u >nm_0.2.txt 

然后你就可以显示出与diff的差异

diff -U0 nm_0.1.txt nm_0.2.txt 

comm

comm -3 nm_0.1.txt nm_0.2.txt 
+0

这似乎并不能很好地工作,因为第一列可以是空白的,所以最终会出现一些完全空白的行。 – BoBTFish

+0

@BoBTFish没有地址的行是未定义或弱符号。我猜这些在这里不相关。无论如何,答案更新。 –