1

最初にいくつかの背景。最近、いくつかのソフトウェアをインストールしました (TeX live 実際)。バイナリは、インストーラーによって非標準の場所 (/usr/local/texlive/2011/bin/x86_64-linux) に配置されました。$PATH を変更してこのディレクトリを含めることができるので、問題ありません。しかし、私は Makefile 内でラテックスを使用しており、Make は「ラテックス」が見つからないと言っていました。私は最終的に、Make がシェルに依存しない方法で latex を実行するようにカーネルに要求していることに気付きました。したがって、すべてのラテックス実行可能ファイルを /usr/local/bin に移動すると、おそらくカーネルが実行可能ファイルを認識できるようになったため、すべてが機能します。

これが正しい場合、私の質問は次のとおりです。これがシェルから独立している場合、プログラムを実行するように求められたときに、カーネルは実行可能ファイルをどこで探しますか?

4

1 に答える 1

3

カーネルは実行可能ファイルを探しません - 常に (絶対または相対) パスが通知されます。すべてのプログラムの実行 (私は信じています) は、基本的にexecve()関数を呼び出すことに帰着します。これには、実行可能ファイルのパスを伝える必要があります。

名前だけを使用してプログラムを呼び出す場合、コマンド (シェル、make) を解釈してプログラムを見つけるのは、そのプログラム次第です。あるいは、 execlp()などのライブラリ関数を使用することもできます。これらの関数は、パス解決自体を行います (「特別なセマンティクス」を参照)。

于 2012-06-12T14:24:48.557 に答える