c - GNU ld : weak declaration overriding strong declaration

标签 c gcc linker static-libraries ld

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

问题:

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;dr; 需要注意的是,weak 属性并不像静态归档库中预期的那样适用。链接器在第一次遇到目标符号名称时停止搜索。 author of the accepted answer解释 weak 可能只对共享对象有意义。

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

相关文章:

c++ - 在 linux 上的 C/C++ 中,如何创建预锁定的互斥体

c - 如何输入整个句子并打印到某个字符?

c - 从 C 获取 Lua 字符串

linux - 关于 GCC 链接器搜索顺序的一些问题

html - 保存时 CSS 样式表未链接到 HTML

c++ - 使用来自无法访问类实现的外部 "plugin"库的 C++ 类引用

c++ - 将链接列表从 C 转换为 C++

c++ - g++ 使用 -Wpedantic 选项 : Is there an option to disable only the warning about unnamed structs? 编译 C++11

xcode - dyld:库未加载:/usr/local/lib/libmpfr.4.dylib

linux - 什么时候应该重新编译手动编译的程序?