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

问题:

IRQ 处理程序未从提供的静态库链接。 IRQ 是在库外使用 __attribute__ ((weak, alias("defaultInterrupt"))) 声明的。提供此属性时,不链接 IRQ。当属性被移除时,IRQ 被链接。

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

问题:

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

环境:

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

已经尝试:

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

最佳答案

似乎很久以前在一个不远的星系中也有人问过类似的问题:Override weak symbols in static library

tl;博士;
收获是 weak 属性并不像人们期望的那样适用于静态存档库。链接器在第一次遇到目标符号名称时停止搜索。 author of the accepted answer 解释说 weak 可能只对共享对象有意义。

关于c - GNU ld : weak declaration overriding strong declaration,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36994557/

10-10 04:04