はじめに
この記事は、@kjunichiの2015年パーソナルアドベントカレンダーの14日目の記事です。
gccの拡張機能らしいがClangでもサポートされている
dloepn時にclang/gccでは
__attribute__((constructor))
を指定した関数を実行する。
例
共有ライブラリ側のコード
#include <stdio.h> __attribute__((constructor)) static void myinit() { printf("I'm initializing..\n"); } int myProc() { printf("main proc.\n"); }
ライブラリ呼び出し側
#include <dlfcn.h> #include <stdio.h> int main(int argc,char** argv) { printf("start main\n"); dlopen("./mylib.dylib", RTLD_NOW); return 0; }
実行結果
./a.out start main I'm initializing..
まとめ
実はこの仕組みをNode.jsが使っている。 Windowsは似たような指定が同様に出来、Windows版のNode.jsでもそれを使っている。