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