- PR -

configureするときのLDFLAGSやLIBSとは

1
投稿者投稿内容
てんろく
常連さん
会議室デビュー日: 2003/02/04
投稿数: 23
投稿日時: 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は解決するものなのか?ご教授いただけると幸いです。
dario
会議室デビュー日: 2003/03/11
投稿数: 11
投稿日時: 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を書き換える派です←ダメ
dario
会議室デビュー日: 2003/03/11
投稿数: 11
投稿日時: 2003-03-19 13:37
自己レスです。

LD_FLAGS → LDFLAGSですね
ごめんなさい。
てんろく
常連さん
会議室デビュー日: 2003/02/04
投稿数: 23
投稿日時: 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をいじるのは少し怖いですね。
dario
会議室デビュー日: 2003/03/11
投稿数: 11
投稿日時: 2003-03-27 02:50
引用:
コンパイルするときに、./configureの前置として、"LIBS -l<ライブラリファイル>"や"LDFLAGS -L<ライブラリファイルのあるディレクトリ>"を付けると、通常ライブラリがあるはずの/usr/libや/usr/local/libではない/home配下などにあるライブラリを見てくれる。



staticにリンクする場合はそれでいいと思います。

--enable-sharedは使った経験がないのでその場合はちょっと分かりません。
ただ、標準的ではない場所にprefixを指定したときには
LD_LIBRARY_PATHで指定するほかないような気がしますね。

ちなみにLD_LIBRARY_PATHは実行時に動的リンクを解決するために
使用されます。ld.so(8)参照。
ですからconfigure時に指定しなくても
実行時に指定されていればOKのはずです。

#makefileをいじるのはコードを読むのと比べたら大変じゃないですよ。
#ビルドのエラーはたいてい対処できますし…
1

スキルアップ/キャリアアップ(JOB@IT)