2017-11-03 19 views
0

ドキュメントに従って、GCCは共有ライブラリをリンクするためのLD_LIBRARY_PATHのパスを見ていますが、私の場合は無視されます! gcc main.c -lfooを返すエラー: -LD_LIBRARY_PATHはGCCによって無視されます

echo $LD_LIBRARY_PATH>:/home/mehrdad/usr/lib

私は "/home/mehrdad/usr/lib" しかし、中libfoo.soている(そうLD_LIBRARY_PATHがcurrectly設定されている)

/usr/bin/ld: cannot find -lfoo 
collect2: error: ld returned 1 exit status 

ので、問題は何であるの? LD_LIBRARY_PATH deprecated ???!

しかし、私は成功し、明示的なコマンドを使用してリンクすることができます。

gcc main.c -L/home/mehrdad/usr/lib -lfoo 

とも私は成功しただけではa.outを実行することができます。

./a.out 

LD_LIBRARY_PATHがOSライブラリローダによって尊敬されているようだが、 GCCではない!

私の環境: OS:CentOSの7 コンパイラ:GCC(GCC)4.8.5 20150623(Red Hatの4.8.5-4)

+2

実行可能ファイル(実際にはダイナミックリンカ)が実行時に、つまりプログラムを起動するときに、大体、 'LD_LIBRARY_PATH'が使用されます。コンパイル時に、ライブラリパスは '-L'オプションで設定する必要があります。 –

+0

"* docsによると、GCCは共有ライブラリをリンクするためのLD_LIBRARY_PATH内のパスを探します*"あなたはそれらのドキュメントにリンクできますか? (おそらく、あなたは 'LIBRARY_PATH'と' LD_LIBRARY_PATH'を混同していますか?おそらくあなたのドキュメントがあります。) –

+0

皆さんありがとう!私は正直なところ、LD_LIBRARY_PATHについて聞いただけです! – mehrdad

答えて

1

は私が間違っていました! Alexandre CDavid Schwartzのおかげで!

LD_LIBRARY_PATHは、ローダー(ランタイム)のみです。

LIBRARY_PATHは、私は、ドキュメントに応じて必要なものです:

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

関連する問題