2012-01-30 22 views
1

我将两组非常相似的源代码集合到一个库存档中。可能有5或6个函数在两个代码集中使用相同的签名来定义,但实现方式略有不同。我需要找到这些功能,以便我可以更改它们的名称(如果我需要这两个),或者删除其中的一个。GNU ld:如何检测多重定义的符号?

我认为ld会为我做些辛苦的工作,报告说这些函数是多重定义的,但它并没有这样做。我目前有两级链接过程:

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

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

任何想法如何让ld扫描整个档案,并报告多重定义的功能?谢谢。

回答

1

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

+0

完成了 - 谢谢。 – EML 2012-01-30 13:18:54