2020年4月12日 星期日

C 語言 - __attribute__((weak))

使用的情境

    假設我們不知道外部是否會提供 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 意見:

張貼留言

Popular Posts