我是Linux gcc的新手。我正在編寫一個簡單的代碼來學習Linux gcc中的弱屬性。弱的屬性只能在Linux GCC的共享庫中工作嗎?
查看我的示例代碼:
weakref.c,主文件。我希望該文件可以在有或沒有foo方法被定義的情況下工作。
#include <stdio.h>
extern void foo(void) __attribute__((weak));
int main() {
if (foo){
foo();
printf ("foo is defined\n");
} else {
printf("foo is not defined\n");
}
}
所以,我運行下面的命令來編譯並運行它:
gcc weakref.c -o main_static
./main_static
,輸出是「富沒有定義」,這是我所期待的。
然後創建一個新的文件libfoo.c,見下圖:
#include <stdio.h>
void foo() {
printf("Print in foo.\n");
}
我試圖3種方式,以儘量使主檔案工作與libfoo.c:
- 編譯安裝libfoo .c和weakref.c並鏈接目標文件。
- 編譯libfoo.c作爲靜態庫,並與weakref.c
- 的對象文件鏈接它編譯libfoo.c作爲共享庫,並與weakref.c 的對象文件鏈接它
只有3路工程,得到下面的輸出:
Print in foo.
foo is defined
可否請你讓我知道如果弱裁判只有一個共享庫的作品,爲什麼?非常感謝!
感謝。我有#1和#2工作。 #1失敗的原因是因爲我使用ld來鏈接2個目標文件而不是gcc。 – 2012-07-07 06:06:29