1
這裏是一個非常具體的問題。我有兩個樣品foo2d.c
文件是這樣的:GCC,從objdump的角度聲明可見性「default」和「hidden」的效果如何
首先,
#include <stdio.h>
__attribute__((visibility("default"))) void FooX(int i);
void Foo2(int i)
{
printf("Via Foo2(%d)\n", i);
FooX(i);
}
其次,
#include <stdio.h>
__attribute__((visibility("hidden"))) void FooX(int i);
void Foo2(int i)
{
printf("Via Foo2(%d)\n", i);
FooX(i);
}
唯一的區別是FooX
知名度聲明。
給定兩個文件相同的名稱並編譯兩次(gcc -c foo2d.c
),我得到兩個.o文件並分別將它們重命名爲foo-default.o
和foo-hidden.o
。我比較兩個.o文件,發現它們只有一個字節。
我真的想知道這個字節的差異的意義,從一個重定位目標的角度來看。 objdump或readelf,或者任何標準的工具可以告訴它們的區別嗎?
我的實驗環境是openSUSE Linux 11.4,gcc 4.5.1。
偉大的答案,謝謝! –