我想構建一些調用共享庫的loadup代碼的代碼。我以爲我會做這樣的:#pragma init和#pragma fini在linux上使用gcc編譯器
#pragma init(my_init)
static void my_init() {
//do-something
}
int add (int a,int b) {
return a+b;
}
所以當我建立一個代碼
的gcc -fPIC -g -c -Wall tt.c
它返回
gcc -fPIC -g -c -Wall tt.c
tt.c:2: warning: ignoring #pragma init
tt.c:4: warning: ‘my_init’ defined but not used
所以它忽略了我的#pragmas。我在真實代碼中嘗試了這一點,並且我的代碼因爲函數沒有在編譯指示段中被調用而被中止,因爲它被忽略。
如何讓gcc使用這些#pragma init和fini語句?
正是我一直在尋找! – Josh 2010-03-19 20:13:47
嗯,對於gcc 4.4.6我在上面的例子中得到'''token'錯誤之前的'expected','或';'。當我從函數定義中移除該屬性,並在其之前放置一個帶有構造函數屬性的函數聲明時,它就像預期的一樣工作[記錄](http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html)。 – maxschlepzig 2013-05-12 12:58:02
@maxschlepzig:該屬性需要在函數定義中的聲明器之前更新。 – caf 2013-05-12 13:52:19