実際に動かして確かめてみる。
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)おいておきます。