実際に動かして確かめてみる。
mylib.hpp
--------------------------------------------------------------------------------
#ifndef __MYLIB_HPP__
#define __MYLIB_HPP__
class MyLibClass {
private:
const char * const myname;
public:
MyLibClass(const char * const name);
~MyLibClass();
};
#endif /* __MYLIB_HPP__ */
--------------------------------------------------------------------------------
mylib.cpp
--------------------------------------------------------------------------------
#include <stdio.h>
#include "mylib.hpp"
MyLibClass::MyLibClass(const char * const name) : myname(name) {
printf("ctor %s %s\n", __FUNCTION__, myname);
}
MyLibClass::~MyLibClass() {
printf("dtor %s %s\n", __FUNCTION__, myname);
}
static MyLibClass __attribute__((init_priority(1))) mylibclass1("mylib1");
static MyLibClass __attribute__((init_priority(1))) mylibclass2("mylib2");
static void __attribute__((constructor(65535))) mylibinitfunc1(void) {
printf("%s\n", __FUNCTION__);
}
static void __attribute__((constructor(0))) mylibinitfunc2(void) {
printf("%s\n", __FUNCTION__);
}
static void __attribute__((destructor(65535))) mylibdeinitfunc1(void) {
printf("%s\n", __FUNCTION__);
}
static void __attribute__((destructor(65534))) mylibdeinitfunc2(void) {
printf("%s\n", __FUNCTION__);
}
--------------------------------------------------------------------------------
main.cpp
--------------------------------------------------------------------------------
#include <stdio.h>
#include "mylib.hpp"
static MyLibClass __attribute__((init_priority(65535))) myclass1("myclass1") ;
static MyLibClass __attribute__((init_priority(1))) myclass2("myclass2");
static void __attribute__((constructor(65535))) myinit1(void) {
printf("%s\n", __FUNCTION__);
}
static void __attribute__((constructor(0))) mynit2(void) {
printf("%s\n", __FUNCTION__);
}
static void __attribute__((destructor(65535))) mydeinit1(void) {
printf("%s\n", __FUNCTION__);
}
static void __attribute__((destructor(0))) mydeinit2(void) {
printf("%s\n", __FUNCTION__);
}
int main(int argc, char *argv[]){
return 0;
}
--------------------------------------------------------------------------------
実行結果
--------------------------------------------------------------------------------
$ LD_LIBRARY_PATH=./ ./main
mylibinitfunc2
ctor MyLibClass mylib1
ctor MyLibClass mylib2
mylibinitfunc1
mynit2
ctor MyLibClass myclass2
myinit1
ctor MyLibClass myclass1
dtor ~MyLibClass myclass1
dtor ~MyLibClass myclass2
mydeinit1
mydeinit2
mylibdeinitfunc1
dtor ~MyLibClass mylib2
dtor ~MyLibClass mylib1
mylibdeinitfunc2
--------------------------------------------------------------------------------
固めたヤツ(
mytest.tgz)おいておきます。