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