こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PATHとLD_LIBRARY_PATHの設定

solarisまたはlinuxで、ソースインストールする際のPATHとLD_LIBRARY_PATHについての質問です。

1.
ソースインストールする際に、事前にPATHやLD_LIBRARY_PATHを設定してから、
./configure → make をするよう説明しているサイトがありますが、
インストールするときだけPATHやLD_LIBRARY_PATHを変更しても問題ないのでしょうか?

たとえば、インストール時に$ export LD_LIBRARY_PATH=/lib:/usr/libとしてインストールしたけど、
実際にサービスを起動する際はLD_LIBRARY_PATHは未設定というような状態のことです。


2.
ソースインストールする際、./configureとmakeを実行する一般ユーザのPATHやLD_LIBRARY_PATHの示すパスと、
make installを実行するrootユーザのPATHやLD_LIBRARY_PATHの示すパス(または順番)が異なっていても大丈夫でしょうか?

たとえば、一般ユーザはLD_LIBRARY_PATH=/lib:/usr/libだけど、
rootユーザはLD_LIBRARY_PATH=/usr/local/lib:/lib というような状態のことです。


3.
exportなどによる一時的な設定ではなく、profieや/etc/ld.so.conf(solarisではcrleによる)などで
固定で設定する場合、注意することはありますか?
個人的に思っているのは、パスの先頭に追加すると既存サービスなどに影響を与える可能性があるので、
最後尾に追加していくことぐらいです。


以上です。よろしくお願いします。

投稿日時 - 2011-07-08 22:37:46

QNo.6863426

困ってます

質問者が選んだベストアンサー

> ソースインストールする際に、事前にPATHやLD_LIBRARY_PATHを設定してから、
> ./configure → make をするよう説明しているサイトがありますが、
> インストールするときだけPATHやLD_LIBRARY_PATHを変更しても問題ないのでしょうか?

インストールアプリによります。

/libまたは/usr/lib以外の場所にインストールされたライブラリとリンクされた場合、
基本的には実行するときもLD_LIBRARY_PATHの設定が必要になります。

ただし、インストール時に実行時パスが設定されている(リンカオプションの-Rまたは
環境変数LD_RUN_PATHが設定されている)場合には、実行ファイルにライブラリ検索パスが
追加されるため、実行時にLD_LIBRARY_PATHの設定が必要ありません。

拡張子が.laのファイルがインストールされている場合は自動的に実行時パスが追加
されることがほとんどですが、zlibやopensslのライブラリのようにlibtoolを使用しない
アプリケーションのライブラリとリンクする場合にはconfigure完了後にconfig.status
を編集して自分で実行時パスを追加する必要があります。

# configureが終わったら、config.statusを開いて、例えばzlibであれば -lz と
# いう箇所を -lz -R/usr/local/libのように書き換えて ./config.status を実行し、
# その後 make する

> ソースインストールする際、./configureとmakeを実行する一般ユーザのPATHや
> LD_LIBRARY_PATHの示すパスと、
> make installを実行するrootユーザのPATHやLD_LIBRARY_PATHの示すパス
> (または順番)が異なっていても大丈夫でしょうか?

アプリケーションにも依ります。makeやmake install時にLD_LIBRARY_PATHが必要な
アプリケーションはほとんど無いと思います。

> exportなどによる一時的な設定ではなく、profieや/etc/ld.so.conf(solarisでは
> crleによる)などで固定で設定する場合、注意することはありますか?

認識されていることが全てでしょう。

よくWebを見ていると、Linux向けのサイトで/etc/ld.so.confに追加するような
記述があり、ミッション・クリティカルなシステムでもそれを真似ているケースも
散見されますが、OS全体に影響を与え下手するとOSの動きが変わってしまうリスク
さえあります。なので、できるだけ設定すべきではないでしょう。ましてや先頭に
追加するのはもってのほかです。極力影響度が少ない実行時パスやLD_LIBRARY_PATHを
使うのが望ましいでしょう。

投稿日時 - 2011-07-11 22:38:13

お礼

丁寧な説明ありがとうございました。
おかげでいくつかの疑問が解消されました。
まだ自分自身、しっかりとした認識ができていませんが、説明の中で出てきた
単語をヒントにさらに調べてみたいと思います。

投稿日時 - 2011-07-13 18:23:56

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.2

(1),(2)
ちょっと冷静に考えれば、「必要なライブラリやコマンドが見付からない可能性がある」という致命的な問題があることがわかると思うのですが。

投稿日時 - 2011-07-09 17:14:01

補足

その問題について悩んでいます。

サービスを実行するユーザ(多くはrootだとも思いますが)のPATHとLD_LIBRARY_PATHが示すパスは、makeまで実行する一般ユーザのそれを含んでいなければならないということになるのでしょうか?

そうでなければ、makeした時点で、ライブラリ等のパスが絶対パスでコンパイルされるのではないか?とも思っています。

投稿日時 - 2011-07-10 00:50:41

ANo.1

なぜ、この投稿にスレが付かないか、考えて、分析してから、これを読んでください。

1番の答え。

未経験者の発言。机上で質問(当たり前か=頭の中だけで考えていると言う意味)であるので、なぜ、こんな変な質問をだしてくるのか。みなさん、釣りと思ってしまう。


2番の答え。

これも1番と同じ。

3番の答え。

言っている事が意味不明。


全体として、ちゃんと、意味を分かって物事をすすめるようにしましょう。

LD_LIBRARY_PATHが何を意味するのか、pathとは何か、何のために環境変数があるのか?

一般ユーザーと、開発環境は違うの当たり前。最終ビルドして、他人に渡すわけだから(そのように考える事)、その環境で動作するように、設計、構築してください。

ちなみに「export」とはexportコマンドの事を指すのですか?

投稿日時 - 2011-07-09 09:03:11

補足

詳しい人からしてみれば未経験者ですが、あなたからしてみればそういう人は質問してはダメなんですね。

投稿日時 - 2011-07-10 00:39:26

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-