0

この質問を読んだ後、私の最初の反応は、ユーザーがライブラリの場所を-L.

ただし、明らかに、この-Lオプションはリンカーが参照する場所にのみ影響し、コンパイルされたアプリケーションを実行しようとしたときにローダーが参照する場所には影響しません。

私の質問は、のポイントは何-Lですか?とにかく適切なディレクトリがないとバイナリを実行できないので、リンカが自動的に検索するのでLD_LIBRARY_PATH、最初にそれらをそこに置き、. をドロップしないのはなぜですか?-LLD_LIBRARY_PATH

4

5 に答える 5

6

クロスコンパイルしていて、リンカーが自分のシステム以外をターゲットにしている可能性があります。たとえば、MinGW を使用して、Linux で Windows バイナリをコンパイルできます。ここで-Lは、リンクに必要な DLL をLD_LIBRARY_PATH指し、リンカーが実行するために必要なライブラリを指します。これにより、異なるアーキテクチャ、OS ABI、またはプロセッサ タイプのコンパイルとリンクが可能になります。

特別なターゲットを構築しようとするときにも役立ちます。プログラムの静的バージョンを別の静的ライブラリに対してリンクする場合があります。これは Linux From Scratch の最初のステップであり、メイン システム上に別のミニ環境を作成してchroot刑務所にします。

于 2012-07-08T18:28:30.867 に答える
3

バイナリの構築とバイナリの実行は、完全に独立した無関係の2つのプロセスです。実行環境が構築環境に影響を与えることを示唆しているようです。つまり、あるセットアップ(アカウント、マシン)でビルドされたコードが後で同じセットアップで実行されることを想定しているようです。この仮定はかなり奇妙だと思います。ほとんどの場合、構築と実行は異なる環境で行われるとさえ言えます。私は実際、コンパイラーが、これらのコンパイラーが呼び出される環境から将来の実行環境についての仮定を導き出さないことを望んでいます。LD_LIBRARY_PATHビルド環境を調べることは、大したことではありません。

于 2012-07-08T19:01:13.483 に答える
3

他の答えはすべて良いですが、まだ誰も言及していないのは静的ライブラリです。ほとんどの場合-L、ビルドツリーにローカルにビルドされた静的ライブラリを使用しますが、インストールするつもりはなく、とは関係ありませんLD_LIBRARY_PATH

于 2012-07-08T21:36:46.867 に答える
3

設定LD_LIBRARY_PATHは、コードをビルドするために実行するすべてのコマンド (コンパイラ自体を含む) に影響します。

これは一般的に望ましくありません (たとえば、コンパイル中にコンパイラにデバッグ/インストルメント化されたライブラリを実行させたくない場合があります。コンパイルを壊すことさえあります)。

ランタイム リンクに影響を与える-Lために、どこを参照するかをコンパイラに指示するために使用します。LD_LIBRARY_PATH

于 2012-07-08T18:29:21.917 に答える
0

Solaris のコンパイラは-R /runtime/path/to/some/libs、実行時リンカーがライブラリを検索するパスに追加する をサポートしています。Linux では、同じことを で実現できます-Wl,-rpath,/runtime/path/to/some/libs-rpath /runtime/path/to/some/libsオプションをに渡しますld。GNUは、他の ELF リンカとの互換性ldのために もサポートしていますが、GNU にシンボル ファイルを指定するために通常使用される-R /path/to/libsため、これは避ける必要があります。-Rld

于 2012-07-08T20:05:49.673 に答える