我正在尝试将weak
格式的ELF
符号属性与内联汇编一起使用。当我尝试使用.weak
程序集指令时,程序集输出同时包含.weak
和.global
指令。
foo.c
__asm(".weak foo");
void foo(void)
{
/* EMPTY FUNCTION! */
}
foo.s
#APP
.weak foo
#NO_APP
.global foo
代码运行良好;但是在这种情况下,当链接器看到符号既是全局符号又是弱符号时,是否会引起任何问题?
最佳答案
不要使用内联汇编来尝试解决编译器,而要使用__attribute__((weak))
来使编译器发出.weak
本身。 gcc function attributes in the docs
__attribute__((weak))
void foo(void){
}
Compiled on the Godbolt compiler explorer with gcc and clang:
.text
.intel_syntax noprefix
.file "example.cpp"
.weak foo() # -- Begin function foo()
.p2align 4, 0x90
.type foo(),@function
foo(): # @foo()
.Lfunc_begin0:
ret
.Lfunc_end0:
.size foo(), .Lfunc_end0-foo()
关于c - 与内联装配的连接弱,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53590498/