有没有办法从构建脚本输出中解析依赖关系树?

问题描述:

我有一个继承的项目,使用构建脚本(而不是make)来建立和链接项目与各种库。有没有办法从构建脚本输出中解析依赖关系树?

当它执行构建时,我想分析构建输出以确定实际静态库链接到最终可执行文件的位置和位置,以及它们来自哪里。

该脚本正在编译和链接GNU工具。

静态库,在这方面使生活更加困难。在动态库的情况下,您可以在生成的可执行文件上使用ldd并完成它。最好的选择是某种配置文件。或者,您可以尝试查找gcc/ld的-l参数。这些用于指定库。你可以编写一个脚本将其从输出中提取出来,但我怀疑你必须手动完成它,因为当你知道脚本应该查找什么时,你可能已经知道答案。

这可能是可能的做一些有用的,例如, Perl,但你必须提供更多细节。另一方面,简单分析脚本可能更容易...

您可以尝试使用nm工具。如果有正确的选项,它会查看二进制文件(存档或链接的图像),并告诉您连接了哪些对象。

其实,这里是一个班轮我在工作中使用:

#!/bin/sh 

nm -Ag $* | sed 's/^.*\/\(.*\.a\):/\1/' | sort -k 3 | grep -v ' U ' 

找到未定义符号的罪魁祸首。只要砍掉最后的grep表达式,它应该几乎给你想要的东西。