GNU ld:弱声明覆盖强声明
GNU ld: weak declaration overriding strong declaration
我正在编写一个裸机应用程序,运行 遇到一个我认为与链接器有关的问题。
问题:
IRQ 处理程序未从提供的静态库链接。 IRQ 在库外用 __attribute__ ((weak, alias("defaultInterrupt")))
声明。提供此属性时,IRQ 为未链接。当属性被移除时,IRQ 被链接。
post: 表示问题可能出在链接器没有找到强声明,因为它停止搜索,但不建议修复。
问题:
有什么方法可以确保链接器找到强声明的函数吗?
环境:
我正在使用由 ARM 分发的 arm-none-eabi-ld,可在此处找到:arm-none-eabi
已尝试:
重新排序传递给链接器的库
似乎很久以前在一个并不遥远的星系中提出了类似的问题:Override weak symbols in static library
tl;博士;
带走的是 weak
属性并不像静态存档库中所期望的那样应用。链接器在第一次遇到目标符号名称时停止搜索。 author of the accepted answer 解释说 weak
可能只对共享对象有意义。
我正在编写一个裸机应用程序,运行 遇到一个我认为与链接器有关的问题。
问题:
IRQ 处理程序未从提供的静态库链接。 IRQ 在库外用 __attribute__ ((weak, alias("defaultInterrupt")))
声明。提供此属性时,IRQ 为未链接。当属性被移除时,IRQ 被链接。
post:
问题:
有什么方法可以确保链接器找到强声明的函数吗?
环境:
我正在使用由 ARM 分发的 arm-none-eabi-ld,可在此处找到:arm-none-eabi
已尝试:
重新排序传递给链接器的库
似乎很久以前在一个并不遥远的星系中提出了类似的问题:Override weak symbols in static library
tl;博士;
带走的是 weak
属性并不像静态存档库中所期望的那样应用。链接器在第一次遇到目标符号名称时停止搜索。 author of the accepted answer 解释说 weak
可能只对共享对象有意义。