main()に来る前に呼ばれる関数の確認 (1/3)

実際に動かして確かめてみる。

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)おいておきます。

このブログ記事について

このページは、らるるが2016年10月11日 23:27に書いたブログ記事です。

ひとつ前のブログ記事は「main()に来る前に呼ばれる関数の確認 (目次)」です。

次のブログ記事は「main()に来る前に呼ばれる関数の確認 (2/3)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.5.0