Search code examples
cgccpragma

#pragma init and #pragma fini using gcc compiler on linux


I would like to build some code which calls some code on loadup of the shared library. I thought i would do it like this:

#pragma init(my_init)

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

int add (int a,int b) {  
  return a+b; 
}

So when i build that code with

gcc -fPIC -g -c -Wall tt.c

It returns

gcc -fPIC -g -c -Wall tt.c 
tt.c:2: warning: ignoring #pragma init 
tt.c:4: warning: ‘my_init’ defined but not used

So its ignoring my #pragmas. I tried this in real code and my code aborted because a function hadn't been called in the pragma section because it was ignored.

How do i get gcc to use these #pragma init and fini statements?


Solution

  • pragmas are almost all compiler-specific. GCC doesn't implement init, but you can get the same effect using the constructor function attribute:

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

    There's also a corresponding destructor attribute.