2016-07-03 15 views
1

私のLIBRARY_PATH変数がエクスポートされていますが、私のライブラリにリンクするためにgccに-Lオプションを渡す必要があります。LIBRARY_PATH環境変数がgccで使用/読み込まれていない

GCCのドキュメントが正しく理解されている場合は、-lオプションを指定するだけでLIBRARY_PATH環境変数が表示されるはずです。

私は

gcc -Wall cog.c -L$HOME/lib -lutil 

を実行すると、プログラムがコンパイルされ、そして予想通り、私はa.outのを取得します。

私は

gcc -Wall cog.c -lutil 

を実行した場合、私は未定義の参照エラーが発生します。

私が知る限り、私は適切に環境変数をエクスポートしました。

cassiopeia~> export LIBRARY_PATH=$HOME/lib 
cassiopeia~> ls $LIBRARY_PATH 
libutil.a 

手がかりはありますか?

私はFedora 23 64bitとgcc version 5.3.1 20160406(Red Hat 5.3.1-6)を使用しています。

+0

LD_LIBRARY_PATHを試してください。 – zgrw

+4

@ zgrw実行時にダイナミックライブラリを見つけるために 'LD_LIBRARY_PATH'がダイナミックローダ' ld.so'によって排他的に使用されています。コンパイラやリンカには影響しません。 – tofro

答えて

2

あなたのディストリビューションはおそらくマルチブ対応です。この場合、ライブラリへのすべてのパス文字列は、このマシンのアーキテクチャ(通常は32ビットまたは64ビット)で展開されます。あなたのサーチパスとして

$ HOME/libに

を指定するのであれば、multilibのは

$ HOME/libに/ x86_64の-linuxの/ 4.6

にそれを展開するかもしれません

または

$ HOME/libに/ x86_32-linuxの/ 4.6

これはかつてこれは、設定のために使用されているすべての検索パスとgccの応答を行い、

gcc --print-search-dirs 

を使用してgccを実行することにより、ケースであるかどうかをチェックすることができますライブラリ。

+0

これには何かがあるかもしれませんが、私はマルチブロック対応のシステムを持っており、gccにどこにライブラリがあるかを示すLIBRARY_PATHを設定すると、$(arch)サブディレクトリは必要ありません。 – davmac

+0

@davmacこれは実際に* multilib *がどのように設定されているかに依存します。私の個人的な意見です: '-L'で与えられた検索パスに触れるべきではありません。ただし、一部のディストリビューションでは、それは行います。 – tofro

関連する問題