==Linux ライブラリ==
[[Linux]]
*以下のサイトから、メモ
**http://www.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/index.html
*特定のプログラムを実行するとき、特定のライブラリ、もしくはライブラリ内の特定の関数でさえもオーバーライドすることができる
*既存のライブラリを使用してプログラムが動いている間にも、これら全てをおこなうことができる
<<blockquote>>これらの望ましい特性すべてを共有ライブラリがサポートするためには、多くの慣習と指針に従わなければならない<</blockquote>><<blockquote>>特に「soname」と「real name」の違いについて また、それらがファイルシステム内のどの場所に置かれるべきであるかについて<</blockquote>>
===共有ライブラリ名===
*全ての共有ライブラリは「soname」と呼ばれる特別な名前を持っている
*soname は、「lib」というプレフィックス、ライブラリの名前、「.so」という語句で構成、さらに後ろに、ピリオドと、インターフェース変更時に必ず増加するバージョン番号、が続く
<<blockquote>>特別な例外として、最下層の C ライブラリは「lib」では始まりません<</blockquote>>
*完全記述の soname は、そのライブラリ自身が含まれるディレクトリをプレフィックスとして含む
*実際のシステムでは、完全記述の soname は、共有ライブラリの「real name」への単なるシンボリックリンク
=====Red Hat から派生しているディストリビューション=====
*多くは、通常 /etc/ld.so.conf ファイル内に /usr/local/lib を含めていない。
<<blockquote>>/usr/local/lib を /etc/ld.so.conf に追加することは、システム上で多くのプログラムを走らせるのに必要な、共通の「修正」<</blockquote>>
====キャッシュ処理====
*ldconfig(8) プログラムはデフォルトで /etc/ld.so.conf ファイルを読み込み、適切なシンボリックリンクを動的リンクディレクトリ内に作成
*キャッシュを /etc/ld.so.cache に書き込み
<<blockquote>>DLL を追加したとき、または、DLL を削除したり、DLL ディレクトリのセットを変更したりしたときには必ず、ldconfig を実行しなければならない<</blockquote>>
===環境変数===
*http://www.visi.com/~barr/ldpath.html
<<blockquote>>開発やテストには便利ですが、一般ユーザに日常的に使用させようとして、インストール処理で変更すべきではない<</blockquote>>
*他の方法では回避できない問題に対処するためには、やはり便利
/lib/ld-linux.so.2 --library-path PATH EXECUTABLE
<<blockquote>>これらの機能は全てデバッグのためにある<</blockquote>>
====LD_DEBUG====
*主な違いは、動的ライブラリは、プログラムのリンク時や起動時に自動的にはロードされない、という点
*そのかわりに、ライブラリをオープンし、シンボルを検索し、エラーを処理し、ライブラリを閉じる、という API が存在
*この API を使用するためには、C プログラマはヘッダファイル <<dlfcn.h> > をインクルードする必要がある
=====インターフェース=====