2

最近、dl_open() で .so ファイルをロードし、dlsym() などで動作するコードに出会いました。dl_open() が動的ライブラリ ファイルをロードすることを理解しています。ライブラリ ファイルを動的にロードすることと、Makefile で .so パスを指定することの違いは何ですか?

もう 1 つの質問は、ライブラリ ファイルを動的にロードする場合、-rdynamic オプションを使用してコンパイルする必要があるかということです。

-fPICこれらは両方ともフラグ付きでコンパイルされていませんか?

4

2 に答える 2

1

Makefile内の.soファイルを静的にリンクすると、アプリケーションが存在しない限り、アプリケーションをビルドできなくなります。実行時に厄介な驚きがないという利点があります。

gcc共有オブジェクトを作成する場合、を使用していると仮定すると-fpic、実行時にコードを再配置できることを意味するだけであり-shared、同様に必要です。オプションはわかりませんが-rdynamic、コンパイラは異なります。

実行時にモジュールをロードすると、モジュールのロードをオプションにすることができます。たとえば、それぞれが異なる機能を表す300個のモジュールを持つ巨大なアプリケーションがあるとします。ユーザーがそれらの10%しか使用しない可能性がある場合、300すべてをマップすることは理にかなっていますか?(とにかくコードはオンデマンドでロードされます)また、実行時に異なるライブラリからバージョンをロードするために使用できるため、柔軟性があります。欠点は、互換性のないバージョンをロードしてしまう可能性があることです。

于 2012-06-20T10:20:02.277 に答える
1

ライブラリ ファイルの動的な読み込みは、ソフトウェア プラグインの実装でよく使用されます。Makefile または静的リンクで .so パスを指定するのとは異なり、動的リンクを使用すると、これらのライブラリが存在しない場合でもコンピュータ プログラムを起動し、利用可能なライブラリを検出して、潜在的に追加機能を取得できます。

リンク

于 2012-06-20T09:27:59.147 に答える