uselib -
共有ライブラリを選択する
#include <unistd.h>
int uselib(const char *library);
システムコール
uselib()
は、呼び出し元プロセスが使用する
共有ライブラリをロードする際に使用される。
このシステムコールにはライブラリのパス名を指定する。
ライブラリをロードするアドレスはライブラリ自身に書かれている。
ライブラリは認識可能なバイナリ形式であればどんな形式でもよい。
返り値¶
成功した場合は 0
が返される。エラーの場合は
-1 が返され、
errno
が適切に設定される。
エラー¶
open(2) と
mmap(2)
が返すエラーコードに加えて、以下のエラーコードが設定されることがある。
- EACCES
- library
で指定されたライブラリに対する読み込み許可、または実行許可がない。
もしくは library
が存在するディレクトリかその上位のいずれかに対する検索許可がない
( path_resolution(7) も参照)。
- ENFILE
- オープンされたファイルの総数がシステム全体の上限に達していた。
- ENOEXEC
- library
で指定されたファイルが、実行可能ファイルと認識されるファイル種別では
ない、つまり正しいマジック・ナンバーが付いていない。
uselib() は Linux
特有の関数であり、移植性を持たせたいプログラム
には使用すべきでない。
初期の libc
の起動コードは、
uselib() を使って、
バイナリ中のリストに書かれている共有ライブラリを
リスト中のそのままの名前でロードしていた。
libc 4.3.2
以降では、これらの名前の前に
"/usr/lib", "/lib", "" を
つけて共有ライブラリを探すようになった。
libc 4.3.4
以降では、これらの名前の共有ライブラリをまず
LD_LIBRARY_PATH
で指定されたディレクトリで探し、見つからなければ、
名前の前に "/usr/lib",
"/lib", "/"
をつけて探す。
libc 4.4.4
以降では、ライブラリ
"/lib/ld.so"
だけがロードされ、その後で
この動的ライブラリが
(このシステムコールをもう一度使って)
必要な残りのライブラリをロードできるようになっている。
glibc2
は、このシステムコールを使用しない。
関連項目¶
ar(1),
gcc(1),
ld(1),
ldd(1),
mmap(2),
open(2),
dlopen(3),
capabilities(7),
ld.so(8)
この文書について¶
この man ページは Linux
man-pages
プロジェクトのリリース
3.41 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。