GNU ld:弱声明压倒强声明

时间:2016-05-03 02:21:53

标签: c gcc linker static-libraries ld

我正在编写一个裸机应用程序,并且遇到了一个我认为与链接器有关的问题。

问题:

IRQ处理程序未从提供的静态库链接。使用__attribute__ ((weak, alias("defaultInterrupt")))在库外声明IRQ。提供此属性时,IRQ 未链接。删除该属性后,IRQ 将链接

这篇帖子:Linking with static library not equivalent to linking with its objects表示问题可能是链接器没有找到强声明,因为它停止搜索,但没有建议修复。

问题:

有没有办法确保链接器能找到强声明的函数?

环境:

我正在使用ARM发布的arm-none-eabi-ld,在此处找到:arm-none-eabi

已经尝试过:

重新排序传递给链接器的库

1 个答案:

答案 0 :(得分:1)

似乎很久以前在一个不太遥远的星系中问了一个类似的问题:Override weak symbols in static library

<强> TL;博士; 需要注意的是,weak属性并不像静态存档库中所期望的那样适用。链接器在第一次遇到目标符号名称时停止搜索。 author of the accepted answer解释了coprime a b = gcd a b == 1 可能仅对共享对象有意义。