Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linux動的ライブラリー(.so)検索パス

Linux動的ライブラリー(.so)検索パス

  
 

ご存じのとおり、Linux動的ライブラリのデフォルトの検索パスは/libと/usr /libです。動的ライブラリが作成された後、それは通常両方のディレクトリにコピーされます。プログラムが動的ライブラリを実行する必要があり、動的ライブラリがメモリにロードされていない場合、システムは2つのデフォルト検索パスで対応する動的ライブラリファイルを自動的に見つけて、ファイルをメモリにロードします。動的ライブラリ内の関数、および動的ライブラリの他のリソースを使用できます。 Linuxでは、デフォルトの検索パスに加えて、動的ライブラリの検索パスを次の3つの方法で指定できます。
方法1:設定ファイル/etc/ld.so.confで動的ライブラリ検索パスを指定します。
動的ライブラリの検索パスとして機能する設定ファイル/etc/ld.so.confを編集して、動的ライブラリの検索パスを指定できます。ファイルを編集したら、ldconfigコマンドを実行して、変更した設定を有効にする必要があります。この方法を例1で説明します。
例1:
次のコマンドを使用して、ソースプログラムpos_conf.cを使用して動的ライブラリlibpos.soを作成します(プログラム1を参照)詳細な作成方法については、[1]を参照してください。
#gcc -c pos_conf.c#gcc -shared -fPCI -o libpos.so pos_conf.o#
#include< stdio.h> void pos(){printf(" /root /test /Conf 1 /lib \\ n");}プログラム1:pos_conf.c
次に、次のコマンドを使用してmain.c(プログラム2を参照)をコンパイルし、ターゲットプログラムposを生成します。
#gcc -o pos main.c -L。-lpos#
void pos(); int main(){pos(); return 0;}プログラム2:main.c
ライブラリを追加するファイルはディレクトリ/root /test /conf /libに移動されます。
#mkdir -p /root /test /conf /lib#mv libpos.so /root /test /conf /lib#
最後に設定ファイル/etc/ld.so.confを編集してこのファイルに追加します1行の「/root /test /conf /lib」。
pos pos tryプログラムを実行します。
#./pos ./pos:共有ライブラリのロード中にエラーが発生しました:libpos.so:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません#
エラーが発生しました。システムは動的ライブラリlibpos.soを見つけられませんでした。理由を探して、設定ファイル/etc/ld.so.confを編集した後、コマンドldconfigが実行されなかったため、変更はまだ有効になっていません。 ldconfigを実行した後に試してみましょう。
#ldconfig#./pos /root /test /conf /lib#
プログラムposが正常に実行され、正しい結果が表示されます。
方法2:環境変数LD_LIBRARY_PATHを使用して動的ライブラリ検索パスを指定します。
動的ライブラリ検索パスは、環境変数LD_LIBRARY_PATHを設定することによっても指定できます。この環境変数で複数の動的ライブラリ検索パスを指定する場合は、パスをコロン「:」で区切ります。その方法を実施例2により以下に説明する。例2:
次のコマンドを使用して、ソースプログラムpos_env.cを使用して動的ライブラリlibpos.soを作成します(プログラム3を参照)。
#gcc -c pos_env.c#gcc -shared -fPCI -o libpos.so pos_env.o#
#include< stdio.h> void pos(){printf(" /root /test /プログラム3:pos_env.c
テスト用の実行可能ファイルposは、例1で取得したターゲットプログラムposを使用することができ、再度コンパイルする必要はありません。 pos_conf.c内の関数posとpos_env.c内の関数pos関数プロトタイプが同じで、動的ライブラリ名が同じであるため、動的ライブラリposを変更した後にライブラリを再作成するのと同じです。これは動的ライブラリを使用する利点の1つです。
次に、動的ライブラリlibpos.soをディレクトリ/root /test /conf /libに移動します。
#mkdir -p /root /test /env /lib#mv libpos.so /root /test /env /lib#
環境変数を設定した後、exportを使用して環境変数を設定できます。この環境変数はコマンド内で有効です。
例:
#export LD_LIBRARY_PATH = /root /test /env /lib#
しかし、この記事を読みやすくするために、環境変数を設定するもう1つの方法は、コマンドの前に環境変数を追加することです。環境変数はこのコマンドに対してのみ有効で、コマンド実行時には無効になります。次のようなコマンドです。
#LD_LIBRARY_PATH = /root /test /env /lib ./pos /root /test /env /lib#
プログラムposは正常に実行され、印刷結果は" /root /test /になります。 Env /lib"は、プログラムpos_env.c内の関数posの結果です。したがって、プログラムposによって検索される動的ライブラリは/root/test/env/lib/libpos.soです。

Copyright © Windowsの知識 All Rights Reserved