11

Mac OS X では、DYLD 形式のバイナリ実行可能ファイルには、ライブラリ ロード システムにファイルの内容の処理方法を指示する「ローダー コマンド」が含まれています。特に、ローダー コマンドは、依存ライブラリを検索する場所などをシステムに指示します。

「otool -l /path/to/your/app」を実行すると、システム上の任意のバイナリのローダー コマンドの完全なリストを表示できます。

一般的に言えば、これらのローダー コマンドは、プロジェクトのコンパイルのリンク段階で「ld」ツールによって設定されます。

私の質問は、ld で (明らかに) サポートされていない公開された型のローダー コマンドを追加するには、どうすればよいですか?

特に、LC_DYLD_ENVIRONMENT ローダー コマンドを利用したいと思います。これは、バイナリのローダー コマンド テーブルで文字列を指定するために使用できます。このコマンドは、実行可能ファイルのコンテキストで環境変数設定としてロードおよび評価する必要があります。

これを容易にする ld への引数はありません。「-sectcreate」のようなものですが、特にローダー コマンドの内容に追加するためのものです。

Mac OS X の少なくとも 1 つの標準アプリである Safari で使用されているため、これが可能であることはわかっています。しかし、彼らがバイナリのある種のリンク後のメッセージによってこれを達成したのか、カスタム ローダー コマンドを構築して連鎖させる方法を知っている ld のカスタム バージョンを使用しているのか、それとも悪用しているのかはわかりません。私が理解できていない ld コマンドの汎用機能です。

4

2 に答える 2

15

「-dyld_env DYLD_FRAMEWORK_PATH=/」のように、-dyld_env を使用できるようです。これは man ページには記載されていませんが、ld64 の Options.cpp にあり、Changelog ファイルに記載されています。Xcode から実行しようとしている場合は、おそらく "-Xlinker -dyld_env -Xlinker DYLD_FRAMEWORK_PATH=/" のようにする必要があります。

注意すべき点: dyld の dyld.cpp を見ると、DYLD_ で始まり _PATH で終わる環境変数のみが許可されていることがわかります。

于 2011-11-18T20:56:12.483 に答える
8

実行可能ファイルが標準の OS X アプリケーション バンドル (つまり、ユーザーが起動できる .app) の一部として構成されている場合、アプリケーション固有の環境変数を指定する従来の方法は、LSEnvironmentキーを使用してその plist ファイルを使用することです。詳しくはこちらをご覧ください。

于 2011-11-18T20:42:30.070 に答える