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

Is there a way to parse a dependency tree from a build script output?

提问人:JeffV 提问时间:9/7/2008 更新时间:10/3/2008 访问量:500

问:

我有一个继承的项目,它使用构建脚本(不是make)来构建项目并将其与各种库链接。

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

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

C++ GCC 链接器 GNU

评论


答:

0赞 Leon Timmermans 9/7/2008 #1

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

0赞 Xavier Nodet 9/7/2008 #2

使用Perl等工具做一些有用的事情是可能的,但你必须提供更多的细节。另一方面,简单地分析脚本可能会更容易......

1赞 Ben Collins 9/7/2008 #3

您可以尝试使用该工具。给定正确的选项,它将查看二进制文件(存档或链接图像)并告诉您哪些对象链接到其中。nm

实际上,这是我在工作中使用的一句话:

#!/bin/sh

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

找出未定义符号的罪魁祸首。只需砍掉最后一个 grep 表达式,它就应该能给你你想要的东西。