0

私は、Linux プラットフォーム用の共有ライブラリを開発することにかなり慣れていません。

によってライブラリのロード時に呼び出される .SO 内で定義できる関数はありますdlopen()か?

4

3 に答える 3

3

GCC または互換性のあるコンパイラを使用している場合は、関数を宣言する__attribute__((constructor))と、ロード時に呼び出されます。何かのようなもの

__attribute__((constructor))
void init()
{
    puts("Hello dynamic linkage world!");
}
于 2013-05-29T12:27:24.530 に答える
2

いいえ、システムによって定義された共有オブジェクトには、標準の「エントリ ポイント」はありません。を使用する特定のアプリケーションはdlopen()、この方法でロードされたモジュールのエントリ ポイントとして使用される標準シンボル名を定義する可能性があります。次に、ホスト アプリケーションは、dlsym()そのシンボルを呼び出すために名前でそのシンボルを検索します。

しかし、ほとんどのアプリケーションは dlopen を直接使用することはまったくありません。

于 2013-05-29T12:27:11.700 に答える