使用的情境
假設我們不知道外部是否會提供 foo() 這個 function,若沒有則用自己的 foo()。 extern int func(void);
int __attribute__((weak)) func(void)
{
return 0;
}
備註 - 不會在動態函式庫 (.so) 中生效
string.so void real_func()
{
printf("strong func\n");
}
weak.so void real_func() __attribute__((weak))
{
printf("weak func\n");
}
main.c extern void real_func();
void main()
{
real_func();
}
結果 :
// 動態連結無效,只看順序
gcc main.c -lstrong -lweak // 輸出 : strong func
gcc main.c -lweak -lstrong // 輸出 : weak func
// 正常 .o 檔
gcc main.c weak.o strong.o // 輸出 : strong func
gcc main.c strong.o weak.o // 輸出 : strong func
參考資料 :
https://www.itread01.com/content/1541531526.html
0 意見:
張貼留言