非標準のプレフィックスを持つバイナリをインストールした場合、たとえば/opt/bin/foo
、/opt/share/foo
からの静的ファイルが必要です 、どのようにそれらを見つけますか?実行可能ファイル(../share/foo
)に関連する後方参照を使用する )?コンパイル時にハードコーディングされていますか?
慣用句とは アプリケーションが可変インストールプレフィックスを処理する方法は?すべてのディレクトリにプレフィックスを付ける必要がありますか? (/var
はどうですか ?)
承認された回答:
コンパイル時にこのような参照をハードコーディングするのが一般的であり、コンパイル時のデフォルトをオーバーライドするコマンドラインオプションまたは環境変数を提供する可能性があります。多くの場合、プログラムは1つの構成ファイルの場所(通常は/etc
の下)を記憶しているだけです。 )コンパイル時のデフォルトをオーバーライドできる場合。このアプローチは、LinuxディストリビューションまたはBSDポートの一部として、オペレーティングシステムを作成するのと同じ人々によってコンパイルされるオープンソースソフトウェアに最も適しています。
バイナリ形式で配布されるアプリケーションの場合、通常のアプローチは、ゼロ番目の引数からアプリケーションバイナリを見つけることです。慣例により、execve
の0番目の引数 (つまり、argv[0]
)はバイナリへのパスです(規則を尊重するのは呼び出し元、多くの場合シェル次第です)。 argv[0]
の場合 /
は含まれていません 、アプリケーションは$PATH
を実行する必要があります それを調べてください。