linuxダイナミックリンクライブラリパスの追加


1
2 export   LD_LIBRARY_PATH= :$LD_LIBRARY_PATH echo   $LD_LIBRARY_PATH
linuxはデフォルトで/libと/usr/libディレクトリの下でライブラリを検索し、lnでソフト接続を確立できます.
 
回転:
1.ライブラリファイルの接続と実行パスの設定
ライブラリファイルの接続(静的ライブラリと共有ライブラリ)と実行(共有ライブラリを使用するプログラムのみ)の場合に使用され、その検索パスはシステムで設定されます.一般的にLinuxシステムでは、/libと/usr/libの2つのディレクトリをデフォルトのライブラリ検索パスとして使用するので、この2つのディレクトリのライブラリを使用する場合は検索パスを設定することなくそのまま使用できます.デフォルトのライブラリ検索パス以外のライブラリでは、ライブラリのビットをライブラリの検索パスに追加します.ライブラリ・ファイルの検索パスを設定するには、次の2つの方法があります.いずれかの方法で使用できます.
 
(1)./etc/ld.so.confファイルにライブラリの検索パスを追加します.(または/etc/ld.so.conf.dの下に.confファイルを新規作成し、検索パスを1行ずつ-junziyangに追加します)
ライブラリファイルを格納可能なパスを/etc/ldに追加します.so.confでは賢明な選択で追加する方法も極めて簡単で、ライブラリファイルの絶対パスを直接書き込めばOKで、1行1行です.例:
1
2
3 /usr/X11R6/lib /usr/local/lib /opt/lib
なお、この検索パスの設定方法は、プログラム接続時のライブラリに対して(共有ライブラリと静的ライブラリを含む)の位置付けは十分ですが、共有ライブラリを使用したプログラムの実行には不十分です.これは、プログラム実行時の共有ライブラリの位置付け速度を速め、検索パスを使用して共有ライブラリを検索する非効率を回避するため、ライブラリリストファイル/etc/ld.so.cacheを直接読み込んで検索するためです./etc/ld.so.cacheはテキスト以外のデータファイルは、/etc/ldに基づいて直接編集できません.so.confで設定した検索パスは、/sbin/ldconfigコマンドがこれらの検索パスの下の共有ライブラリファイルを集約して生成します(ldconfigコマンドはroot権限で実行します).
したがって、プログラム実行時のライブラリの位置付けを保証するために、/etc/ld.so.confでライブラリ検索パスの設定を行う後、/sbin/ldconfigコマンド更新/etc/ldを実行する必要があります.so.Cacheファイルの後でいいです.ldconfig、簡単に言えば、その役割は/etc/ldです.so.confがリストするパスの下のライブラリファイルは/etc/ldにキャッシュされる.so.cacheを使用します.したがって、glibをインストールしたばかりのライブラリファイルやldを変更する.so.confが新しいライブラリパスを追加すると、/sbin/ldconfigを実行してすべてのライブラリファイルをldにキャッシュする必要があります.so.Cacheでは、やっていなければ、ライブラリファイルが/usr/libの下にあるのに、使われないので、コンパイル中に間違えて、xxxライブラリが欠けていて、そこに置いてあるのに、computerバカ豚をののしりたいと思っています.
プログラム接続時には、ライブラリファイル(スタティックライブラリと共有ライブラリ)の検索パスについて、上記の設定の他に、-Lパラメータで明示的に指定することもできます.-Lで設定したパスが優先的に検索されるので、接続時にはこのように直接接続するライブラリのパスを指定するのが一般的です.
この設定には/etc/ldを変更するためにroot権限が必要である.so.confファイルを実行し、/sbin/ldconfigコマンドを実行します.また、システムが再起動されると、GTK 2ベースのすべてのプログラムが実行されると、新しくインストールされたGTK+ライブラリが使用されます.残念なことに、GTK+バージョンの変更により、アプリケーションに互換性の問題が発生し、一部のプログラムが正常に動作しない場合があります.このようなことを回避するために、GTK+とその依存ライブラリのインストール中にライブラリの検索パスの設定は別の方法で行われます.この設定方式はroot権限を必要とせず、設定も簡単です.
(2). 環境変数LD_LIBRARY_PATHには、ライブラリの検索パスが示されています.
 
設定方法:
1 export   LD_LIBRARY_PATH= /opt/gtk/lib :$LD_LIBRARY_PATH
LD_は次のコマンドで表示できます.LIBRAY_PATHの設定内容:
1 echo   $LD_LIBRARY_PATH
これで、ライブラリの2つの設定が完了します.
2.クロスコンパイル時に接続ライブラリの検索パスをどのように構成するか
クロスコンパイルではローカル(i 686マシン、すなわちPCマシン、開発マシン)マシン上のライブラリは使用できませんが、コンパイルリンクを作成する際にはデフォルトではローカルライブラリ、すなわち/usr/lib、/libの2つのディレクトリを使用します.そのため、クロスコンパイルの際には、リンクをコンパイルする際に必要なライブラリを見つけるためのいくつかの方法を採用します.
まず、コンパイル時にはヘッダドキュメントだけが必要で、実際のライブラリドキュメントはリンク時に使用されることを知っておく必要があります.(これは私の理解です.もし間違っているところがあれば、ネット上の皆さんに教えてください)それから、クロスコンパイルリンクの時に必要なライブラリを見つける方法について話します.
(1)クロスコンパイル時に直接-Lと-Iのパラメータを使用して、非標準のライブラリドキュメントとヘッダドキュメントを検索するパスを指定します.次に例を示します.
1 arm-linux- gcc   test .c -L /usr/local/arm/2 .95.3 /arm-linux/lib   -I /usr/local/arm/2 .95.3 /arm-linux/include
  
2)ldを使用する.so.confドキュメント.使用するライブラリがあるドキュメントディレクトリをこのドキュメントに追加し、ldconfigコマンドを使用してキャッシュをリフレッシュします.
(3)次のコマンドを使用します.
1 export   LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /usr/local/arm/2 .95.3 /arm-linux-lib
  
Linuxのダイナミックライブラリでのノットの使用
1.静的ライブラリと動的ライブラリの基本概念
静的ライブラリは、実行可能なプログラム接続時にすでに実行コードに組み込まれており、物理的に実行プログラムの一部となっている.静的ライブラリを使用してコンパイルされたプログラムは、ライブラリファイルのサポートを必要とせず、どこでも使用できますが、生成された実行可能ファイルは大きいです.ダイナミックライブラリは、実行可能プログラムの起動時に実行プログラムにロードされ、複数の実行可能プログラムで共有して使用できます.ダイナミックライブラリコンパイルを使用して生成されるプログラムは比較的小さいが、実行時にライブラリファイルのサポートが必要であり、マシンにこれらのライブラリファイルがなければ実行できない.
2.ダイナミックライブラリの使用方法
どのようにプログラムが接続時に共有ライブラリを使用するかは、実行時に共有ライブラリの場所を見つける必要があります.linuxの実行可能プログラムは、実行時にデフォルトで/libと/usr/libの2つのディレクトリを検索し、/etc/ldに従います.so.confの中の構成は絶対パスを検索します.また、Linuxは環境変数LD_を提供しています.LIBRARY_PATHはユーザーが選択して使用するため、ユーザーはそれを設定することによってデフォルトの経路以外の他の経路を探すことができて、例えば/work/lib経路を探すことができて、あなたは/etc/rc.d/rc.localまたは他のシステムの起動後に実行できるスクリプトには、次の文が追加されます.LD_LIBRARY_PATH =/work/lib:$(LD_LIBRARY_PATH).そしてLD_LIBRARY_PATHパスは、システムのデフォルトパスよりも先に検索されます(詳細は『LD_LIBRARY_PATHの使用』を参照).
でもLD_LIBRARY_PATHの設定は大域的な役割を果たしており,過剰な使用は他のアプリケーションの実行に影響を及ぼす可能性があるため,デバッグに多く用いられる.(LD_LIBRARY_PATHの欠陥と使用基準は、『Why LD_LIBRARY_PATH is bad』参照).通常、gccの-Rまたは-rpathオプションを使用して、コンパイル時にライブラリの検索パスを指定し、そのライブラリのパス情報を実行可能ファイルに保存することを推奨します.実行時には、LD_の使用を回避するために、そのパス検索ライブラリに直接アクセスします.LIBRARY_PATH環境変数検索.
3.ライブラリのリンク時パスとランタイムパス
現代のコネクタは動的ライブラリの処理時にリンク時パス(Link-time path)とランタイムパス(Run-time path)を分離しており、ユーザーは-Lで接続時ライブラリのパスを指定し、-R(または-rpath)でプログラムランタイムライブラリのパスを指定することで、ライブラリアプリケーションの柔軟性を大幅に向上させることができます.たとえば、埋め込み移植時#arm-linux-gcc$(CFLGS) –o target –L/work/lib/zlib/-llibz-1.2.3(work/lib/zlib下はクロスコンパイルされたzlibライブラリ)targetをコンパイルした後、zlibライブラリを開発ボードのシステムデフォルトパスにコピーすればいいです.または-rpath(または-R)、LD_LIBRARY_PATHで検索パスを指定します.