3

ldは、「OS X の上位依存関係」を指定するためのいくつかのオプションをサポートしています。ここでの上位依存関係とは何ですか?

-upward-lx  This is the same as the -lx but specifies that the dylib is an upward dependency.
-upward_framework name[,suffix]
             This is the same as the -framework name[,suffix] but also specifies that the framework is an upward dependency.
4

1 に答える 1

3

上方依存は、通常の依存順序に反するものです。ライブラリ "A" のコードが、ライブラリ "B" に実装されている関数を呼び出すとします。ライブラリ「A」は「B」に依存しています。ここで、ライブラリ "B" にも、ライブラリ "A" の何かに依存するコードが含まれているとします。これは上向きの依存関係です (これは一般的に非常に壊れやすいものです)。

このような状況が発生した場合は、リンカーに依存するのではなく、メディエーターを介して間接的なコールバックを作成することにより、コードで問題を解決する必要があると思います。

コールバック/メディエーター スキームの例は次のとおりです...

ライブラリ "A" のコードはまだライブラリ "B" に依存しているが、ライブラリ "B" には特定のアクションを実行するためのコールバック関数を登録するメカニズムがあるとします。メディエーターとして機能する 3 番目のモジュールは、ライブラリー「B」にライブラリー「A」を直接呼び出す代わりに、ライブラリー「A」内の関数がライブラリー「B」からのコールバックを介して呼び出されるように調整できます。リンカは "A" から "B" への依存関係を解決するだけで済み、実行時に "B" から "A" への制御された関係が構築され、リンク フェーズで上向きの依存関係チェーンが必要になりません。

于 2012-06-25T02:47:11.743 に答える