#pragma init和#pragma fini在linux上使用gcc编译器

Jos*_*osh 11 c gcc pragma

我想构建一些代码,在共享库的加载时调用一些代码.我以为我会这样做:

#pragma init(my_init)

static void my_init () {  
  //do-something
}

int add (int a,int b) {  
  return a+b; 
}
Run Code Online (Sandbox Code Playgroud)

所以当我用它构建代码时

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
Run Code Online (Sandbox Code Playgroud)

所以它忽略了我的#pragmas.我在实际代码中尝试了这个并且我的代码中止了,因为在pragma部分中没有调用函数,因为它被忽略了.

我如何让gcc使用这些#pragma init和fini语句?

caf*_*caf 17

pragma几乎都是特定于编译器的.GCC没有实现init,但你可以使用constructorfunction属性获得相同的效果:

static __attribute__((constructor)) void my_init()
{  
  //do-something
}
Run Code Online (Sandbox Code Playgroud)

还有一个相应的destructor属性.