- - PR -
configureするときのLDFLAGSやLIBSとは
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-03-10 21:35
アプリケーションをインストールには、configure ⇒ make ⇒ make installとすれば、大概インストールできてしまいます。
しかし、ときにprefixを指定してインストールしてしまうと、その後、インストールするソフトウェアに「ライブラリがない」と言われてインストールできないことがあります。 そんなとき、無理矢理、ライブラリと思われるファイル(インストールしたソフトのlib配下や*.soファイル)を/usr/libと/usr/local/libにリンクしたりコピーしたりしてインストールしてきました。 こんないい加減なやり方で良いものなのでしょうか?(絶対良くないでしょうね!!) 最近では、大概のソフトウェアを--enable-sharedでインストールして、LD_LIBRARY_PATHを指定してやってます。(これも良いかどうかも分からず...) さて、本題ですが、これでもlibrary not foundでインストールできないソフトウェアがあります。それで、調べたところ、configureのオプションに、LIBSやLDFLAGSがあるようですが、どういうときに使用するものなのか、分かりません。 どういうときに使用するものなのか?これで、library not foundは解決するものなのか?ご教授いただけると幸いです。 | ||||
|
投稿日時: 2003-03-19 13:33
./configure --helpを見てください。
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS linker flags, e.g. -l<lib>.{a,so} if you have nonstandard libraries to link とあります。 これらの変数は最終的にMakefileで $(CC) $(LD_FLAGS) -o taget $(LIBS) のように使われます。 ですからgccに与えるオプションをそのままわたせばいいと思います。 一般的な使い方としては, ライブラリのある位置をLD_FLAGSで指定して, 特別にライブラリを追加してリンクする時はLIBSを指定すればいいのではないでしょうか? (ただ、LIBSを指定するのがどんな時なのかちょっと想像できませんね) 以下のようにすれば/home/hoge/lib以下のライブラリも検索するようになります。 LD_FLAGS="-L/home/hoge/lib" ./configure #私はめんどくさいのでMakefileを書き換える派です←ダメ | ||||
|
投稿日時: 2003-03-19 13:37
自己レスです。
LD_FLAGS → LDFLAGSですね ごめんなさい。 | ||||
|
投稿日時: 2003-03-26 01:59
darioさん、ありがとうございます。
つまり、こう理解しても良いものなのでしょうか? コンパイルするときに、./configureの前置として、"LIBS -l<ライブラリファイル>"や"LDFLAGS -L<ライブラリファイルのあるディレクトリ>"を付けると、通常ライブラリがあるはずの/usr/libや/usr/local/libではない/home配下などにあるライブラリを見てくれる。 ちなみに、LD_LIBRARY_PATHも./configure時に見てくれるようですが、環境変数ですから/homeのような場所にあるライブラリの指定には、LIBSやLDFLAGSを使う方が良いのでしょうか? プログラムの経験がほとんどない私には、Makefileをいじるのは少し怖いですね。 | ||||
|
投稿日時: 2003-03-27 02:50
staticにリンクする場合はそれでいいと思います。 --enable-sharedは使った経験がないのでその場合はちょっと分かりません。 ただ、標準的ではない場所にprefixを指定したときには LD_LIBRARY_PATHで指定するほかないような気がしますね。 ちなみにLD_LIBRARY_PATHは実行時に動的リンクを解決するために 使用されます。ld.so(8)参照。 ですからconfigure時に指定しなくても 実行時に指定されていればOKのはずです。 #makefileをいじるのはコードを読むのと比べたら大変じゃないですよ。 #ビルドのエラーはたいてい対処できますし… |
1