我想构建一些调用共享库的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