热门问题
时间线
聊天
视角
弱符號
来自维基百科,自由的百科全书
Remove ads
弱符號(Weak symbol)是連結器在生成ELF檔案的過程中使用的一種特殊屬性符號。預設情況下,如果沒有特別聲明,目的檔裡面的符號都是強符號。在連結過程中,一個強符號會優先於一個同名的弱符號。相比之下,兩個同名強符號一起連結會出現連結錯誤。當連結一個可執行檔,弱符號可以不定義。但對於強符號,如果沒有定義,連接器會產生一個「符號未定義」錯誤 (undefined symbol)。使用弱符號的目的是,當不確定這個符號是否被定義的情況下,連結器也可以成功連結出ELF檔案,適用於某些模組還未實現的情況下,其他模組的先行除錯。 弱符號在C語言和C++語言的規範裡面沒有被提及,所以使用弱符號的代碼,移植性不是非常好。[1]
語法
GCC和Solaris Studio C對於弱符號使用相同的聲明, # pragma weak 或者使用函式或變數的屬性聲明 , __attribute__((weak))。[2][3][4][5][6][7]
// function declaration
#pragma weak power2
int power2(int x);
// function declaration
int __attribute__((weak)) power2(int x);
// or
int power2(int x) __attribute__((weak));
// variable declaration;
extern int __attribute__((weak)) global_var;
參考
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads