2013-10-11 52 views
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.ofoo-hidden.o。我比較兩個.o文件,發現它們只有一個字節。

Beyond Compare showing the diff

我真的想知道這個字節的差異的意義,從一個重定位目標的角度來看。 objdump或readelf,或者任何標準的工具可以告訴它們的區別嗎?

我的實驗環境是openSUSE Linux 11.4,gcc 4.5.1。

回答