6、linux共有ライブラリの組織

2541 ワード

共有ライブラリのバージョン
  • 1、互換性、共有ライブラリをより良いバイナリ互換性を持つためには、c++をインタフェースとして使用しないことが望ましい.(2)クラス内の任意のメンバー変数の位置およびタイプを変更しない
  • 2、共有ライブラリバージョン命名
  • libname.so.x.y.z
    x    ,x        
    y    ,      ,     
    z     ,            
    
  • 3、SO-NAMEは、1つのライブラリのインタフェースを表し、1つのプログラム依存の共有ライブラリに必要な最小情報
  • を体現する.
    libname.so.x
    linux     so-name    ,             ,            ldconfig            
    libname.so.x->libname.so.x.y.z
    

    履歴上の理由でc言語ライブラリとダイナミックリンクのso-nameは以下の通りです.
    ld-linux.so->ld-2.6.1.so
    libc.so.6->libc-2.6.1.so
    

    シンボルバージョン
    シンボルバージョンの概念を提案したのは,サブバージョン交差の問題であり,SO-NAMEを用いてプログラム実行時にメインバージョンのみを判断したが,メインバージョン番号が同じ共有ライブラリにも存在する一定のインタフェース数の違いにより,SO-NAMEに依存してプログラムが正常に実行される保証はない(これはサブバージョン交差の問題である).シンボルバージョンの基本的な考え方は、共有ライブラリのインポート・エクスポート・シンボルごとに関連するバージョン番号があり、名前修飾のような方法で使用されます.
    共有ライブラリのシステムパス
    現在、多くのlinuxシステムはFHS(file hierarchy standard)という標準をサポートしており、システム内のシステムファイルをどのように配置すべきかを規定しており、各ディレクトリの構造、組織、役割FHSには3つの共有ライブラリの配置ディレクトリが規定されている.
  • 1、/libは、主に/bin、/sbinおよびシステム起動に使用する必要がある共有ライブラリ
  • であるシステムの最も重要かつ基礎的な共有ライブラリを格納する.
  • 2、/usr/libは主に非システム実行時に必要な重要な共有ライブラリを格納し、一部の開発ライブラリなど
  • を含む.
  • 3、/usr/local/lib主にサードパーティ製アプリケーションを格納するライブラリ
  • 共有ライブラリの検索プロセス
    動的リンクモジュールに依存するモジュールパスは.dynamicによってDT_に保存されます.NEEDタイプアイテムは、通常保存されている共有ライブラリの相対パスを示します.リンクはリンク時に共有ライブラリの実際の場所を検索する必要があります.検索順序は以下の通りです.
  • 0、LD_LIBRARY_PATH変数が示す経路の下で検索し、この変数はあるプログラムの共有ライブラリ検索経路を一時的に変更することができ、この変数リンクが共有ライブラリを検索する際にその変数が示す経路
  • を優先的に検索することを指定する.
  • 1、検索/etc/ld.so.cache、ldconfigによって更新
  • を作成
  • 2、検索/libおよび/usr/libディレクトリ
  • リンクに関連する環境変数
  • 1、LD_LIBRARY_PATHこの変数は、あるプログラムの共有ライブラリの検索パスを一時的に変更することができ、この変数リンクが共有ライブラリを検索するときにその変数が示すパス
  • を優先的に検索することを指定する.
  • 2、LD_PRLOADこの変数は、プログラムが他の共有ライブラリをマウントするときに、LD_よりも優先して事前にいくつかの共有ライブラリをマウントすることを指定できます.LIBRARY_PATHは、プログラムが共有ライブラリに依存しているかどうかにかかわらずロードされます.(このメカニズムの存在により、ロード時のグローバルシンボル介入メカニズムもあるため、この変数を利用して標準ライブラリまたは他のライブラリのシンボルを置き換えることができる)
  • .
  • 3、LD_DEBUGという変数は、ダイナミックリンクのデバッグ機能を開き、共有ライブラリのロード、シンボルの解析、パス検索などのプロセス
  • のリンクの詳細を表示することができます.
    共有ライブラリの作成インストール
    1、作成
    gcc -shared -fPIC -Wl,-soname,my_soname -o libname source_file
    -shared        
    -fPIC            
    -Wl              ,  -soname        SO-NAME
    

    2、インストールは/libまたは/usr/libまたは/usr/local/libディレクトリにコピーし、ldconfig 3、共有ライブラリスクリプトを実行します.共有ライブラリは通常elfのdsoファイルですが、共有ライブラリは一定のフォーマットに合致するスクリプトであってもよく、このスクリプトによって構造が現在ある共有ライブラリを一定の方法で組み合わせることができます.ユーザーの観点から新しい共有ライブラリです.フォーマットは次のとおりです.
    GROUP( /lib/libc.so.6 /lib/libm.so.2)
    

    end~