2009-03-02 8 views
9

Solaris上でアプリケーション固有のLD_LIBRARY_PATH変数を設定する最も良い場所は何ですか? SolarisではLD_LIBRARY_PATHをどこに設定しますか?

LD_LIBRARY_PATH

変数しくみを教えてください。

我々は現在、.kshrcでそれを設定しますが、異なるアプリケーションは、メッセージングフレームワークの異なるバージョンを必要とするが、これらのアプリケーションは、同じ使用下で実行し、これを設定するのに最適な場所でどのようなあなたの意見でので、したがって、彼らは、異なるLD_LIBRARY_PATHが必要になります変数?

基本的に私はこの変数パスをユーザー環境固有ではなくアプリケーションの一部にする方法を見つけようとしています。

答えて

14

通常は、アプリケーションを起動するシェルスクリプトがあります。シェルスクリプトでは、LD_LIBRARY_PATHをそのアプリケーションのために必要なものに設定してから、そのアプリケーションを起動するスクリプトを作成します。そのようにすると、そのアプリケーションに対してのみパスが設定されます。

+0

にも書かれています。ありがとうございました。しかし、その変数を外部のapp_profileファイルに入れてから、そのファイルをスクリプト内でソースするのは意味がありますか?それとも何か問題があるのですか?私は、複数のアプリがそれを外部化するのに理にかなっているかもしれない同じ道を必要としているので、私は考えていますか? –

+0

LD_LIBRARY_PATH(またはLD_LIBRARY_PATH_32とLD_LIBRARY_PATH_64)は、実行可能ファイルが起動する前に設定する必要があります。ld.so.1はmain()に入る前にld.so.1を読み込んでから読み込みます。 –

+0

@Ville - これはうまくいくと思うが、まずそれを試してみてほしい。 –

6

LD_LIBRARY_PATHの正式な説明は、 "ld.so.1"のmanページにあります。つまり、 "man ld.so.1"を実行してください。また、実行時リンカーが使用するその他の変数についても説明します。

LD_LIBRARY_PATHに加えて、実行可能ファイルと共有ライブラリには、ライブラリ用の組み込み検索パスを含めることもできます。リンクしているアプリケーションを実行している場合は、ldの-Rオプションを使用して、組み込みパス(Sun CCとgccの両方で同じことをするオプション)を設定できます。これにより、最初にLD_LIBRARY_PATHの使用を避けることができます。

-1

あなたはcrleコマンドを使用することができます

crle -l /パス/に/あなた/ libに/ファイル

+1

crleはグローバル環境ファイルに設定するのと同じ問題を抱えています。これはすべてのアプリケーションに影響するため、異なるアプリケーションに異なるバージョンのライブラリが必要な場合は役に立ちません。 – alanc

+0

alancが正しいです。 –

+1

@alancは*間違っています。 'crle -c'は特定のアプリケーションに影響を与えます(例6:http://docs.oracle.com/cd/E19082-01/819-2239/crle-1/index.htmlを参照してください) – vladr

1

をcrle応答が最も正確です。 SolarisではLD_LIBRARY_PATHを使用しないでください。代わりにcrleを使用してください。現在のパスを表示するには、単に "crle"を実行してください。リストを更新するには、crle -u -l /path/to/your/lib/directoryを使用します。 -uは、システム構成の変更を書き込むために必要です。変更しないと、一時的な変更になります。その他のオプションについては、マニュアルページを参照してください。

+2

前回のcrle答えのコメントに書かれているように、これは最善の解決策ではありません。なぜなら、* all *プログラムだけでなく、構築されたパスとは異なるパスを必要とする壊れたプログラムにも影響するからです。これらのアプリケーションのためだけにLD_LIBRARY_PATHを設定するシェルスクリプトラッパーは、すべてのプログラムの変更を危険にさらすよりもはるかに安全で衛生的であり、互換性のないパスを必要とする異なるアプリケーションを処理する唯一の方法です。 – alanc

+2

@alanc、間違っています。 'crle -c'を使ってアプリケーションごとの環境を定義することができます(Windowsのマニフェストはhttp://docs.oracle.com/cd/E19082-01/819-2239/crle-1/indexの例6を参照してください)。 html)。 – vladr

0

グローバルLD_LIBRARY_PATHが有効にならないケースが見つかりました。スクリプトをラップし、アプリの前にLD_LIBRARY_PATHを設定しなければなりませんでした。 blastwaveのpkgutilを使って/ opt/csw/libの下にたくさんのlibsをインストールした場合、crleは良いグローバルソリューションです。

0

.profileまたは.profile.userファイルをチェックすることができます。コメント付きのエントリがあります。壊れているので使用することはお勧めしません。フラグを使用してバイナリをビルドする必要があります。変数。

2

Vladr、alancは正しいです。

SolarisではLD_LIBRARY_PATHを設定することは推奨されません。まったく。

ライブラリまたは実行可能ファイルに特定の実行パスを書き込む必要がある場合は、 リンカに-Rフラグを使用する必要があります。 gccでビルドする場合は、 -Wl、Rpathを使用してください(私は思う)。

ビルド後の手順でこれを行う必要がある場合(例えば、 ソースが再コンパイルされていないため)、elfedit(1)が役立ちます。マニュアルページの と、リンカ+ライブラリガイドのhttp://docs.oracle.com/cd/E26502_01/html/E26507/index.html

+0

互換性の理由から、SolarisのGCCも '-R'を理解しています。 '-Wl、-Rsomedir'はLinuxに移植可能なので、引き続き' -Wl、-Rsomedir'を使用することができます。あるいは、-Wl、-rpath、somedirを使用してください。 SolarisおよびLinux上の実行時リンカーによって。 – maxschlepzig

関連する問題