質問

私はシンプルなC ++プログラムを構築しており、開発とテストのために、提供された共有ライブラリを最近のバージョンに一時的に置き換えたいと考えています。

LD_LIBRARY_PATH変数を設定しようとしましたが、リンカー(LD)に失敗しました。

/usr/bin/ld:ca n't can cont -lyaml -cpp

LD Manページによると、それが機能することを期待していました:

リンカーは、次の検索パスを使用して必要な共有ライブラリを見つけます。...ネイティブリンカーの場合、環境変数「LD_LIBRARY_PATH」の内容...

その後、ライブラリ_Pathを設定しようとしましたが、それはうまくいきました。

GCCマニュアルによると:

Library_Pathの価値は、パスによく似たディレクトリのコロン分離リストです。ネイティブコンパイラとして構成されている場合、GCCはGCC_EXEC_PREFIXを使用して見つからない場合、特別なリンカーファイルを検索するときに指定されたディレクトリを試します。 GCCを使用してリンクすると、-Lオプションの通常のライブラリを検索するときにこれらのディレクトリも使用します(ただし、-Lで指定されたディレクトリが最初に来ます)。

(GCC)マニュアルが示唆するように、GCCとリンクするため、Library_Pathが機能します。

だが..

  • エラーメッセージが示唆するように、GCCとリンクしているのはなぜLDが呼ばれているのですか?
  • 同じ目的に役立つ2つの変数を持っていることのポイントは何ですか?他に違いはありますか?
役に立ちましたか?

解決

LIBRARY_PATH コンパイル前にGCCが使用して、プログラムにリンクする必要がある静的および共有ライブラリを含むディレクトリを検索します。

LD_LIBRARY_PATH プログラムでは、含まれるディレクトリを検索するために使用されます 共有 ライブラリが正常にコンパイルされ、リンクされた後。

編集:以下に指摘されているように、ライブラリは静的または共有できます。静的な場合、コードはプログラムにコピーされ、プログラムがコンパイルされてリンクされた後にライブラリを検索する必要はありません。ライブラリが共有されている場合、プログラムに動的にリンクする必要があり、それが LD_LIBRARY_PATH 登場します。

他のヒント

LD_LIBRARY_PATH プログラムが開始されると検索されます。 LIBRARY_PATH リンク時に検索されます。

からの警告 コメント:

エラーメッセージが示唆するように、GCCとリンクしているのはなぜLDが呼ばれているのですか?

GCCは、リンクモードの場合、LDを内部的に呼び出します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top