有没有一种方法可以查看C/C++存档文件(.a)中的函数?

3
我们有一个简化版的情况:
  1. source.c 中存在 test()
  2. source.c 编译为 object.o
  3. object.o 被链接到归档文件 archive.a
  4. archive.a 编译为最终的 binary
我们试图将 test() 的名称更改为其他名称。但是,在步骤(4)中的链接步骤指出新的方法签名不存在。使用 gobjdump,我们可以确定重命名后的新方法存在于 object.o 中(它与其他方法位于同一 SECT 中且不是 UND)。
我们可以确定 object.o 存在于 archive.a 中。但是,由于复杂的构建系统,我们不能确定 archive.a 是否包含该方法。
简而言之:是否有一种方法可以查看归档文件的内部并列出其中特定二进制对象的函数?

1
这是C还是C++?在这方面,C没有“方法”或“对象”。 - unwind
这实际上是一个开源的 C 方法库,它被放入存档中,但编译成了一个 C++ 项目。 - JoshuaJ
3
你可以使用nm工具列出库中所有的函数。 - πάντα ῥεῖ
如果您将archive.a链接到您的二进制文件中,而链接器抱怨找不到某个函数,则该函数不在archive.a中。至少,在您包含在链接中的archive.a副本中不存在该函数。 - John Bollinger
@JohnBollinger,这正是我们正在考虑的,而且我们正在尝试看是否有一种方法可以使用“ar”工具来解决这个问题。现在我将尝试使用“nm”工具。 - JoshuaJ
好的,使用 nm 我们已经确认新方法确实存在于存档文件中: 00000000000076f0 T __Z14svm_get_nr_sv2PK9svm_model 然而,g++ 仍在抱怨找不到它... - JoshuaJ
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接