GNU/Linux >> Linux の 問題 >  >> Linux

Linux で共有ライブラリを初期化する方法

コードを移植可能にしたい場合は、おそらく次のようなことを試してみてください:

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++ グローバル初期化がどのように実装されるかです。


Linux
  1. LinuxにNcursesライブラリをインストールする方法

  2. Linux 共有ライブラリの紹介 (共有ライブラリの作成方法)

  3. Linux 共有ライブラリがエクスポートしている関数のリストを表示するにはどうすればよいですか?

  1. Linux in C で共有メモリを使用する方法

  2. Linux で googleTest を共有ライブラリとして設定する方法

  3. Linuxで共有ライブラリを別の共有ライブラリとリンクする

  1. 古いバージョンの共有ライブラリにリンクするにはどうすればよいですか

  2. Linux で共有ライブラリの遅延ロードを行う方法

  3. 共有ライブラリがインストールされているかどうかを確認するには?