GNU ld:如何检测多重定义的符号?

时间:2012-01-30 09:40:01

标签: linker gnu ld

我将两组非常相似的源代码集合到一个库归档中。可能有5个或6个函数在两个代码集中定义了相同的签名,但实现略有不同。我需要找到这些函数,以便我可以更改它们的名称(如果我需要它们两个),或者删除其中一个。

我认为ld会为我做出艰苦的工作,通过报告函数是多重定义的,但它没有这样做。我目前有一个两阶段的链接程序:

1 - 两组源文件的增量链接,用于生成存档文件。如果我已经知道哪些函数是多重定义的,我可以使用nm确认该符号在存档中出现两次。

2 - 此归档文件与调用库代码的对象的最终链接。 'ld'在此步骤中不会抱怨,并且可能只是链接它在归档中找到的第一个匹配对象,而不报告也可以使用第二个对象。

知道如何让ld扫描整个存档,并报告多重定义的函数吗?感谢。

1 个答案:

答案 0 :(得分:1)

尝试所有组件.o文件(而不是.a文件)的链接,您将获得多重定义的消息。