4

内部で dlopen を使用して共有ライブラリ libabc を動的にロードして実行する abc という小さな C プログラムがあります。libabc は、実行時に動的に読み込まれて呼び出される関数 greeting を宣言します。次の 2 つの方法でコンパイルして実行すると、結果は同じになります。共有オブジェクト (.so) C ライブラリを作成するときの GCC コンパイラの -shared フラグと -bundle フラグの違いは何ですか?

方法 1

cc -c libabc.c -o libabc.o
cc **-shared** -o libabc.so libabc.o
cc -Wall -g abc.c -ldl -o abc
./abc ./libabc.so greeting "Hello World"

方法 2

cc -c libabc.c -o libabc.o
cc **-bundle** -o libabc.so libabc.o
cc -Wall -g abc.c -ldl -o abc
./abc ./libabc.so greeting "Hello World"

ダーウィン gcc 4.2 の使用

4

1 に答える 1

4

を使用しない場合-bundle、生成された共有オブジェクトは、dlopen() 後に dlclose() で再度アンロードできません。プロセスの存続期間全体にわたってメモリに残ります。-bundleタイプ MH_BUNDLE のファイルを生成します。

ところで、推奨される (ただし必須ではない) バンドルの拡張子は であり.bundle、 ではありません.so

于 2012-12-11T13:16:44.337 に答える