我有一个继承的项目,它使用构建脚本(不是 make)来构建项目并将其与各种库链接。
当它执行构建时,我想解析构建输出以确定链接到最终可执行文件的实际静态库是什么和在哪里以及它们来自哪里。
该脚本正在使用 GNU 工具进行编译和链接。
您可以尝试使用该nm
工具。给定正确的选项,它将查看二进制文件(存档或链接图像)并告诉您链接到其中的对象。
实际上,这是我在工作中使用的单线:
#!/bin/sh
nm -Ag $* | sed 's/^.*\/\(.*\.a\):/\1/' | sort -k 3 | grep -v ' U '
找出未定义符号的罪魁祸首。只需砍掉最后一个 grep 表达式,它就应该可以满足您的需求。
静态库,这让这方面的生活变得更加困难。如果是动态库,您可以在生成的可执行文件上使用 ldd 并完成它。最好的选择是某种配置文件。或者,您可以尝试寻找 gcc/ld 的 -l 参数。这些用于指定库。您可以编写一个脚本来从输出中提取它,但我怀疑您必须手动执行它,因为当您知道脚本应该查找什么时,您可能已经知道答案了。
使用例如 Perl 可能会做一些有用的事情,但您必须提供更多细节。另一方面,简单地分析脚本可能更容易......