我们有一个简化版的情况:
我们可以确定
简而言之:是否有一种方法可以查看归档文件的内部并列出其中特定二进制对象的函数?
source.c
中存在test()
source.c
编译为object.o
object.o
被链接到归档文件archive.a
archive.a
编译为最终的binary
test()
的名称更改为其他名称。但是,在步骤(4)中的链接步骤指出新的方法签名不存在。使用 gobjdump
,我们可以确定重命名后的新方法存在于 object.o
中(它与其他方法位于同一 SECT 中且不是 UND)。我们可以确定
object.o
存在于 archive.a
中。但是,由于复杂的构建系统,我们不能确定 archive.a
是否包含该方法。简而言之:是否有一种方法可以查看归档文件的内部并列出其中特定二进制对象的函数?
nm
工具列出库中所有的函数。 - πάντα ῥεῖarchive.a
链接到您的二进制文件中,而链接器抱怨找不到某个函数,则该函数不在archive.a
中。至少,在您包含在链接中的archive.a
副本中不存在该函数。 - John Bollingernm
我们已经确认新方法确实存在于存档文件中:00000000000076f0 T __Z14svm_get_nr_sv2PK9svm_model
然而,g++ 仍在抱怨找不到它... - JoshuaJ