コードを移植可能にしたい場合は、おそらく次のようなことを試してみてください:
namespace {
struct initializer {
initializer() {
std::cout << "Loading the library" << std::endl;
}
~initializer() {
std::cout << "Unloading the library" << std::endl;
}
};
static initializer i;
}
Linux の C++ では、ライブラリがロードされるとすぐにグローバル変数が自動的に構築されます。これがおそらく最も簡単な方法です。
ライブラリのロード時に任意の関数を呼び出す必要がある場合は、GCC のコンストラクター属性を使用します。
__attribute__((constructor)) void foo(void) {
printf("library loaded!\n");
}
コンストラクター関数は、ライブラリーがロードされるときに動的リンカーによって呼び出されます。これは、実際に C++ グローバル初期化がどのように実装されるかです。