• ベストアンサー

LD_LIBRARY_PATHって?

環境変数で「LD_LIBRARY_PATH」というのがあるかと思うのですが、この変数はOSが使用する変数なのでしょうか?それとも単一、あるいは複数のアプリケーションソフト(ORACLEなどのような)が使用する変数なのでしょうか? 基本的な質問で申し訳ありませんが、教えてください。

  • kutu
  • お礼率54% (152/279)

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

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.2

OSが使用する変数です。リンク時または実行時にリンクする共有ライブラリを探すために使用されます。 LD_LIBRARY_PATHが設定されていない場合、ダイナミックローダーは/libや/usr/lib等に存在するライブラリを検索しますが、それ以外の場所に存在するライブラリを見つける事ができません。 実行プログラムが32ビットの場合はLD_LIBRARY_PATHが、64ビットの場合でLD_LIBRARY_PATH_64が設定されている場合はこちらが使用されます。 なお、リンク時パスや実行時パスはコンパイル時に設定することもできます。

kutu
質問者

お礼

よく理解することができました。 また補足説明ありがとうございました。

その他の回答 (1)

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

暫く遠ざかっているので自信なしですが ダイナミックリンカーが参照する環境変数だったと思います。 それ自体はOSの一部と考えてよいと思います。 ただし、アプリケーションを動作させるために参照するので、 アプリケーションによっては、この環境変数がないと 動かなかったりします。

kutu
質問者

お礼

ORACLEインストール時にも、 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib を設定するということは、OSだけに限らずORACLEもこの変数を参照しているということでしょうね。 ありがとうございました。

関連するQ&A

  • 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による)などで 固定で設定する場合、注意することはありますか? 個人的に思っているのは、パスの先頭に追加すると既存サービスなどに影響を与える可能性があるので、 最後尾に追加していくことぐらいです。 以上です。よろしくお願いします。

  • ld.so.confとLD_LIBRARY_PATH

    環境は、debianEtchなのですが (1)LD_LIBRARY_PATH=/usr/local/lib (2)echo "/usr/local/lib" >> /etc/ld.so.conf  ldconfig と2通りの設定で実験をしたのですが、 (1)の設定ではプログラムがエラーを吐かずに動く。 (2)の設定では、プログラムがエラーを吐いて動かない。 (1)と(2)の設定では、何が違うのでしょうか。 私の考えではライブラリの検索場所を探してるという同じ位置づけなのです。 どなたかご存知の方がいられましたらご教授のほうお願いします。

  • 環境変数の設定

    PerlでCGIを書いています。 環境変数LD_LIBRALY_PATHを設定するのに、 Perlのスクリプト内で、$ENV{LD_LIBRARY_PATH}に値を代入しているのですが、もっとスマートな環境変数の設定法はありませんでしょうか。 残念ながら、httpd.confを書き換える権限は持っていません。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • 共有ライブラリへのパス指定の方法

    共有ライブラリへのパス指定の方法について教えて下さい。 環境は TurboLinux / C言語です lib_k.sl という共有ライブラリがあります。 【開発環境】  /hhn --- lib -(ここにlib_k.slがある)     |     -- src - ・・・(ここにプログラムのソースファイルがある) 【実行環境】  /ppc --- lib -(ここにlib_k.slを置く)     |     -- ld -(ここにプログラムのロードモジュールを置く) 開発プログラムのメイクファイルに、  /hhn/lib/lib_k.sl と書いてリンクさせています。すると、実行環境でも  /hhn/lib/lib_k.sl にリンクしようとしに行っているようです。 実行環境で /ppc/lib/lib_k.sl にリンクするには、どのようにすればよいのでしょうか? Cプログラミングはずっとやっていますが、共有ライブラリは使用したことが有りません。 ご教授お願いします。

  • javaの中で環境変数を設定する。

    javaの記述内で環境変数を設定する事は出来るのでしょうか? osはredhat linuxです。 具体的にはJAVAからCのモジュールをSystem.loadLibraryで 読み込んでいますが、環境変数LD_LIBRARY_PATHから探しに行くと思います。 このCのモジュールのパスを外部ファイルに持たせ、変更できるようにしたいのです。 何か良い方法がありますでしょうか? 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • 環境変数"Path"の値に%PATH%

    環境変数"Path"の値に%PATH% OS : Windows XP Home 環境変数"Path"の値に、「%PATH%;」という文字列が含まれていたのですが、 これは正常な状態でしょうか?(意味のない値のように思えます。) 過去に環境変数を不用意にいじくってしまった結果、Windowsが起動しなくなり 「前回正常起動時の構成 (正しく動作した最新の設定)」でなんとか復旧、という経験があるので気になって質問いたしました。 当時、環境変数にどんな編集を行ったのかは、全く思い出せません(すみません。。。) どなたか分かるかた、よろしくお願いいたします。

  • Oracleインストール後のSQL/PLUSの実行について

    初めてLinuxのOracleのインストールをしています。 Oracle11gをインストールし11GのWEBの管理画面・クライアントからの SQLPLUSの接続は問題なくできているのですが サーバ自身でSQL/PLUSを実行すると下記のようなエラーとなってしまします。 [oracle@svr01 bin]$ sqlplus /nolog bash: sqlplus: command not found 掲示板等で調べてみますとパスが通っていないのが原因とありました。 下記のようになっておりますが、どこの記述に不具合があるのか分かりません。 また、別のファイルにも何か設定が必要でしょうか? ご存知の方教えてください。 よろしくお願いします。 ------------------------- # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH # added by oranavi export ORACLE_BASE=/opt/app/oracle export ORACLE_HOME=/opt/app/oracle/product/11.1.0/db_1 export ORACLE_SID=svr01 export NLS_LANG=Japanese_Japan.JA16EUC export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export PATH=$PATH:$ORACLE_HOME/bin export ORACLE_DOC=$ORACLE_HOME/doc CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/JRE CLASSPATH=$CLASSPATH:$ORACLE_HOME/jlib CLASSPATH=$CLASSPATH:$ORACLE_HOME/rdbms/jlib CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/classes12.jar CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/nls_charset12.jar export CLASSPATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/jdbc/lib LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib export LD_LIBRARY_PATH --- MiracleLinux V5 Oracle11g 11.1.0.6

  • Unix上C++でのdllとインポートライブラリの関係

    こんにちわ。 いつも教えてgooにお世話になっているorange_pieです。 UNIX上のC++で作成した自作ライブラリをdllにして配布したいのですが、 Unixでの基本的な考え方を教えてください。 (1)Unix上ではDLLの標準的な名称は”libxxxx.so”とするのが普通ですか?  ※この形式ならLD_LIBRARY_PATH環境変数が検索してくれる。。。 (2)通常、DLLにする場合、インポートライブラリ(.lib)と実際のライブラリ(.so)を作成して、使用する側はインポートライブラリのみをリンクするのでしょうか? (3)配布されたdllを使う側では、Link時にインポートライブラリをリンクして、関連インクルードファイルをインクルードするだけで使えるのでしょうか? (4)上記の(2)のように、インポートライブラリとライブラリの実態を作成する為のコンパイルオプションが見つかりません。(ldのmanを見たのですが、意味がわからないと言うか。。。。。) この質問は、自作ライブラリからlibxxx.soという形のオブジェクトファイルを作り、別プログラムからこのlibxxxをコンパイルオプション(-l)でリンクしてみたら正しく動作したのですが、これでは結局ライブラリの本体が一緒にリンクされている様子で、出来上がった実行形式のファイルサイズが静的ライブラリとしてリンクした時と同じ大きさになっていることに疑問を抱いてしまったものです。  この状態でも、ライブラリの方だけコンパイルしなおして実行すると ちゃんとライブラリの変更点は反映されるので問題は無いのですが、 これでもダイナミックリンク・ライブラリと呼べるのでしょうか?

  • httpd で SetEnv が使えない

    httpd-2.2.17を使っております。 --enable-suexec でconfigure しておりますが、cgi の中でいくつかのモジュールを使う関係で LD_LIBRARY_PATH を設定する必要があります。 そのため、httpd.conf に SetEnv LD_LIBRARY_PATH xxxxxxxxxxxx を記述しております。 ところが、cgi でモジュールを使おうとすると、読み込みに失敗してしまいます。調べてみると SetEnv で設定したはずの LD_LIBRARY_PATH が設定されていません。 さらに、いろいろ調べて suexec を使っているために SetEnv が無効になっていると分かりました。 しかし、suexec はセキュリティ的には便利なのでできれば、使いたいのです。 suexec を有効にしつつ、cgi に環境変数を渡す方法はないでしょうか?

  • PowerShellと環境変数pathについて、

    PowerShellと環境変数pathについて、 Windowsの環境変数pathには、アプリケーションをインストールしたら自動的に追加されたりします。 これらの中には%systemroot%のようにdos系の環境変数を使った物もあります。 PowerShell から$env:pathを参照した場合も dosから%path%を参照した場合も pathの内容自体は同じですが、 PowerShellから実行する場合は、%systemroot%のようなdos系の環境変数は機能せず、pathが通っていない状態になります。 そんなものなのでしょうか? PowerShellを同じように使うためには、 なんとなく気持ちが悪いですが、 %systemroot%をc:\windowsで登録しなおすか、もしくは二重登録する必要があるのでしょうか? 何かスマートな方法はありますでしょうか?