実際に動かして確かめてみる。
mylib.hpp
mylib.cpp
main.cpp
実行結果
固めたヤツ(mytest.tgz)おいておきます。
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)おいておきます。
