#pragma init и #pragma fini использующий gcc компилятор на Linux

Я хотел бы создать некоторый код, который называет некоторый код loadup общей библиотеки. Я думал, что сделаю это как это:

#pragma init(my_init)

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

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

Таким образом, когда я создаю тот код с

gcc-fPIC-g-c - Стена 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 операторы?

11
задан Sjon 9 October 2015 в 17:11
поделиться

3 ответа

Практически все прагмы зависят от компилятора. GCC не реализует init , но вы можете получить тот же эффект, используя атрибут функции конструктор :

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

Также имеется соответствующий атрибут деструктор .

17
ответ дан 3 December 2019 в 07:12
поделиться

Вместо этого используйте C ++:

// init.cpp
namespace // an anonymous namespace
{
     class autoinit
     {
         public:
             ~autoinit(){ /* destruction code, if applicable */ }
         private:
             autoinit(){ /* content of myinit */ }
             static autoinit _instance;
     };

     autoinit 
     autoinit::_instance; // static instance forces static construction
}
-3
ответ дан 3 December 2019 в 07:12
поделиться

Очевидно #pragma init и #pragma fini поддерживаются только GCC для Solaris:

3
ответ дан 3 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: