2
考虑下面的简单程序:GCC行为
__attribute__((weak)) void weakf(void);
int main(int argc, char *argv[])
{
weakf();
}
当用gcc编译这和Linux的PC上运行它,它出现segfaults。在ARM CM0(arm-none-eabi-gcc)上运行时,链接器会跳转到下面的指令和nop来替换未定义的符号。
此行为记录在哪里?有没有办法通过命令行选项来改变它?我已经通过GCC和LD文件,没有关于这方面的信息。
如果我检查ARM编译器文档,但是,this is clearly explained。
我要寻找从商务部的官方行为,并非针对任何解决办法 – calandoa
,但我知道这个功能是不是C标准和它的外观的一部分像许多GCC的功能没有足够的文件。 https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes ' weak weak属性导致声明作为弱符号而不是全球。这对定义可以在用户代码中重写的库函数非常有用,但它也可以用于非函数声明。 ELF目标支持弱符号,在使用GNU汇编器和链接器时也支持a.out目标。 ' – Gnukos