たとえば、非標準のプレフィックスを含むバイナリをインストールしたが、いくつかの/opt/bin/foo
静的ファイルが必要な場合は、/opt/share/foo
そのファイルをどのように見つけますか?実行可能ファイル()に基づいて../share/foo
逆参照を使用しますか?コンパイル時にハードコードされていますか?
何ですか詩アプリケーションは変数のインストールプレフィックスをどのように処理しますか?すべてのディレクトリにプレフィックスを付ける必要がありますか? (何について/var
?)
答え1
コンパイル時にこれらの参照をハードコーディングするのが一般的であり、コンパイル時のデフォルト値をオーバーライドするためにコマンドラインオプションまたは環境変数を指定できます。通常、プログラムは/etc
コンパイル時のデフォルト値を上書きできる設定ファイル(通常は下)の場所のみを記憶します。このアプローチは、オペレーティングシステムを作成したのと同じ人がLinuxディストリビューションまたはBSDポートの一部としてコンパイルしたオープンソースソフトウェアに最適です。
バイナリ形式でデプロイされたアプリケーションの一般的なアプローチは、0番目の引数から始めてアプリケーションバイナリを見つけることです。通常、0番目のパラメータはexecve
(つまりargv[0]
)は、バイナリ(呼び出し元(通常シェル)が準拠するルール)へのパスです。argv[0]
含まれていない場合、/
アプリケーションは$PATH
それに対して照会を実行する必要があります。
答え2
最も一般的なものは検出です。さまざまなパスはさまざまなプレフィックスで提供でき、autotoolsには別々のシステム構成( "")、ライブラリディレクトリ( "")などが--prefix
あります。/etc
/usr/lib
答え3
プログラムをコンパイルするために使用されるツール(GNU Autotoolsなど)は、指定されたオプションの値を取得して--prefix
ヘッダファイルに定義として置くことができます。
#define PREFIX "/usr/local/"
コードはPREFIX
パス名の一部として使用します。
答え4
Unded Unixには、バイナリが起動する場所、つまりコンパイル変数のインストールプレフィックスを検出する移植可能な方法はありません。