コードを移植可能にしたい場合は、おそらく次のようなことを試してみてください:
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++ グローバル初期化がどのように実装されるかです。