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

时间:2020-03-05 18:48:46  来源:igfitidea点击:

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

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

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

解决方案

回答

静态库使这方面的工作更加困难。在使用动态库的情况下,我们可以仅在生成的可执行文件上使用ldd并对其进行处理。最好的选择是某种配置文件。或者,我们可以尝试寻找gcc / ld的-l参数。这些用于指定库。我们可以编写一个脚本从输出中提取脚本,尽管我怀疑我们将必须手动执行该脚本,因为当我们知道脚本应查找的内容时,我们可能已经知道了答案。

回答

使用例如Perl,但我们必须提供更多详细信息。另一方面,简单地分析脚本可能会更容易...

回答

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

实际上,这是我在工作中使用的单线:

#!/bin/sh

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

查找未定义符号的罪魁祸首。只需砍掉最后一个grep表达式,它就可以为我们提供所需的内容。