OSDN Git Service

(split) LDP: Release pages for LDP v3.39.
[linuxjm/LDP_man-pages.git] / release / man3 / dlopen.3
index 0c2d043..235bfb4 100644 (file)
 .\" Modified by Walter Harms: dladdr, dlvsym
 .\" Modified by Petr Baudis <pasky@suse.cz>, 2008-12-04: dladdr caveat
 .\"
-.\" Japanese Version Copyright (c) 1998 NAKANO Takeo all rights reserved.
-.\" Translated Sat May 23 1998 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
-.\" Updated & Modified 1999-09-14, NAKANO Takeo
-.\" Modified 2000-03-19, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
-.\" Updated 2001-02-16, Kentaro Shirakata <argrath@ub32.org>
-.\" Updated 2001-12-21, Kentaro Shirakata <argrath@ub32.org>
-.\" Updated 2002-10-21, Kentaro Shirakata <argrath@ub32.org>
-.\" Updated 2003-09-01, Kentaro Shirakata <argrath@ub32.org>
-.\" Updated 2005-03-15, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
-.\" Updated 2006-01-20, Akihiro MOTOKI
-.\" Updated 2009-03-02, Akihiro MOTOKI, LDP v3.19
+.\"*******************************************************************
 .\"
-.\"WORD:       linker                  リンカ
-.\"WORD:       dynamic linking         動的リンク
-.\"WORD:       dynamic library         動的ライブラリ
+.\" This file was generated with po4a. Translate the source file.
 .\"
-.TH DLOPEN 3 2008-12-06 "Linux" "Linux Programmer's Manual"
+.\"*******************************************************************
+.TH DLOPEN 3 2008\-12\-06 Linux "Linux Programmer's Manual"
 .SH 名前
-dlclose, dlerror, dlopen, dlsym \- 動的リンクを行うローダへの
-プログラミングインターフェース
+dlclose, dlerror, dlopen, dlsym \- 動的リンクを行うローダへの プログラミングインターフェース
 .SH 書式
-.B #include <dlfcn.h>
+\fB#include <dlfcn.h>\fP
 .sp
-.BI "void *dlopen(const char *" filename ", int " flag );
+\fBvoid *dlopen(const char *\fP\fIfilename\fP\fB, int \fP\fIflag\fP\fB);\fP
 .sp
-.B "char *dlerror(void);"
+\fBchar *dlerror(void);\fP
 .sp
-.BI "void *dlsym(void *" handle ", const char *" symbol );
+\fBvoid *dlsym(void *\fP\fIhandle\fP\fB, const char *\fP\fIsymbol\fP\fB);\fP
 .sp
-.BI "int dlclose(void *" handle );
+\fBint dlclose(void *\fP\fIhandle\fP\fB);\fP
 .sp
 \fI\-ldl\fP でリンクする。
 .SH 説明
-.BR dlopen (),
-.BR dlsym (),
-.BR dlclose (),
-.BR dlerror ()
-の 4つの関数は、動的リンク (dynamic linking) を行うローダへの
-インタフェースを実装したものである。
-.SS "dlerror()"
-関数
-.BR dlerror ()
-は、前回
-.BR dlerror ()
-が呼び出された後に、
-.BR dlopen (),
-.BR dlsym (),
-.BR dlclose ()
-のいずれかで最後に発生したエラーについての説明メッセージを返す。
+\fBdlopen\fP(), \fBdlsym\fP(), \fBdlclose\fP(), \fBdlerror\fP()  の 4つの関数は、動的リンク (dynamic
+linking) を行うローダへの インタフェースを実装したものである。
+.SS dlerror()
+関数 \fBdlerror\fP()  は、前回 \fBdlerror\fP()  が呼び出された後に、 \fBdlopen\fP(), \fBdlsym\fP(),
+\fBdlclose\fP()  のいずれかで最後に発生したエラーについての説明メッセージを返す。
 初期化後または前回呼び出された後で、エラーが発生していなければ NULL を返す。
-.SS "dlopen()"
-関数
-.BR dlopen ()
-は、NULL 終端された文字列
-.I filename
-で指定されたファイル名の動的ライブラリ (dynamic library) をロードし、
-その動的ライブラリへの内部「ハンドル」を返す。
-.I filename
-が NULL の場合、メイン・プログラムへのハンドルが返される。
-.I filename
-がスラッシュ ("/") を含む場合、(相対か絶対かの)パス名として解釈される。
-それ以外の場合、動的リンカは以下の手順でライブラリを検索する
-(詳細は
-.BR ld.so (8)
+.SS dlopen()
+関数 \fBdlopen\fP()  は、NULL 終端された文字列 \fIfilename\fP で指定されたファイル名の動的ライブラリ (dynamic
+library) をロードし、 その動的ライブラリへの内部「ハンドル」を返す。 \fIfilename\fP が NULL
+の場合、メイン・プログラムへのハンドルが返される。 \fIfilename\fP がスラッシュ ("/")
+を含む場合、(相対か絶対かの)パス名として解釈される。 それ以外の場合、動的リンカは以下の手順でライブラリを検索する (詳細は \fBld.so\fP(8)
 を参照):
 .IP o 4
-(ELF のみ) 呼び出し元プログラムの実行ファイルに DT_RPATH タグが含まれており、
-DT_RUNPATH タグが含まれていない場合、DT_RPATH タグに書かれている
-ディレクトリ・リストを検索する。
+(ELF のみ) 呼び出し元プログラムの実行ファイルに DT_RPATH タグが含まれており、 DT_RUNPATH
+タグが含まれていない場合、DT_RPATH タグに書かれている ディレクトリ・リストを検索する。
 .IP o
-プログラムの開始時に環境変数
-.B LD_LIBRARY_PATH
-にコロン区切りのディレクトリのリストが定義されていれば、
-この環境変数に定義されたディレクトリが検索される
-(セキュリティ上の理由で、この変数は set-UID や set-GID された
+プログラムの開始時に環境変数 \fBLD_LIBRARY_PATH\fP にコロン区切りのディレクトリのリストが定義されていれば、
+この環境変数に定義されたディレクトリが検索される (セキュリティ上の理由で、この変数は set\-UID や set\-GID された
 プログラムの場合は無視される)。
 .IP o
 (ELF のみ) 呼び出し元プログラムの実行ファイルに DT_RUNPATH タグが含まれて
 いる場合、そのタグに書かれているディレクトリ・リストを検索する。
 .IP o
-キャッシュファイル
-.I /etc/ld.so.cache
-の中に
-.I filename
-のエントリが入っているかをチェックする
-.RB ( /etc/ld.so.cache
-は
-.BR ldconfig (8)
-によって管理されている)。
+キャッシュファイル \fI/etc/ld.so.cache\fP の中に \fIfilename\fP のエントリが入っているかをチェックする
+(\fB/etc/ld.so.cache\fP は \fBldconfig\fP(8)  によって管理されている)。
 .IP o
-ディレクトリ
-.I /lib
-と
-.I /usr/lib
-をこの順番で検索する。
+ディレクトリ \fI/lib\fP と \fI/usr/lib\fP をこの順番で検索する。
 .PP
-そのライブラリが他の共有ライブラリに依存している場合は、
-依存しているライブラリも動的リンカが同じ検索ルールに基づいて
-自動的にロードする (それらのライブラリにさらに依存関係がある場合などは
-この処理は再帰的に行われる)。
+そのライブラリが他の共有ライブラリに依存している場合は、 依存しているライブラリも動的リンカが同じ検索ルールに基づいて 自動的にロードする
+(それらのライブラリにさらに依存関係がある場合などは この処理は再帰的に行われる)。
 .PP
-.I flag
-には以下の 2 つの値のいずれかを含めなければならない:
-.TP
-.B RTLD_LAZY
-lazy binding (手抜きなシンボルの結び付け) が行う。
-シンボルの解決はそのシンボルを参照するコードが実行されるときにのみ
-行われる。シンボルが一度も参照されなかった場合には、そのシンボルは
-解決されないままとなる。
-(lazy binding は関数参照についてのみ実施される; 変数への参照は常に
-ライブラリがロードされた時点で直ちに解決される。)
-.TP
-.B RTLD_NOW
-この値が指定されるか、環境変数
-.B LD_BIND_NOW
-に空でない文字列が設定された場合、
-ライブラリ中の未定義のシンボルを全て解決してから
-.BR dlopen ()
-は復帰する。解決できなかったときにはエラーが返される。
+\fIflag\fP には以下の 2 つの値のいずれかを含めなければならない:
+.TP 
+\fBRTLD_LAZY\fP
+lazy binding (手抜きなシンボルの結び付け) が行う。 シンボルの解決はそのシンボルを参照するコードが実行されるときにのみ
+行われる。シンボルが一度も参照されなかった場合には、そのシンボルは 解決されないままとなる。 (lazy binding
+は関数参照についてのみ実施される; 変数への参照は常に ライブラリがロードされた時点で直ちに解決される。)
+.TP 
+\fBRTLD_NOW\fP
+この値が指定されるか、環境変数 \fBLD_BIND_NOW\fP に空でない文字列が設定された場合、 ライブラリ中の未定義のシンボルを全て解決してから
+\fBdlopen\fP()  は復帰する。解決できなかったときにはエラーが返される。
 .PP
-以下の値のうち 0 個以上を論理和 (OR) の形で
-.I flag
-に追加することもできる:
-.TP
-.B RTLD_GLOBAL
-このライブラリで定義されているシンボルが、これより後でロードされる
-ライブラリのシンボル解決で利用できるようになる。
-.TP
-.B RTLD_LOCAL
-このフラグは
-.B RTLD_GLOBAL
-の反対の意味であり、どちらのフラグも指定されなかった場合は
-こちらがデフォルトとなる。
-このライブラリで定義されているシンボルは、これより後でロードされる
-ライブラリでのシンボル参照で利用できない。
-.TP
-.BR RTLD_NODELETE " (glibc 2.2 以降)"
-.BR dlclose ()
-中にそのライブラリをアンロードしない。
-そのため、同じライブラリをこれ以降に
-.BR dlopen ()
-で再度ロードした場合に、ライブラリ内の静的変数は再初期化されない。
-このフラグは POSIX.1-2001 では規定されていない。
-.\" (しかし Solaris に存在する)
-.TP
-.BR RTLD_NOLOAD " (glibc 2.2 以降)"
-そのライブラリをロードしない。
-このフラグはそのライブラリがすでに組み込まれているかを検査するのに
-利用できる
-.RB ( dlopen ()
-は、ライブラリが組み込まれていなければ NULL を返し、
-すでに組み込まれていればそのライブラリのハンドルを返す)。
-また、すでにロードされているライブラリのフラグを昇格させるのにも
-利用できる。例えば、過去に
-.B RTLD_LOCAL
-でロードしたライブラリを
-.BR RTLD_NOLOAD\ |\ RTLD_GLOBAL
-で再オープンすることができる。
-このフラグは POSIX.1-2001 では規定されていない。
-.\" (しかし Solaris に存在する)
-.TP
-.BR RTLD_DEEPBIND " (glibc 2.3.4 以降)"
+以下の値のうち 0 個以上を論理和 (OR) の形で \fIflag\fP に追加することもできる:
+.TP 
+\fBRTLD_GLOBAL\fP
+このライブラリで定義されているシンボルが、これより後でロードされる ライブラリのシンボル解決で利用できるようになる。
+.TP 
+\fBRTLD_LOCAL\fP
+このフラグは \fBRTLD_GLOBAL\fP の反対の意味であり、どちらのフラグも指定されなかった場合は こちらがデフォルトとなる。
+このライブラリで定義されているシンボルは、これより後でロードされる ライブラリでのシンボル参照で利用できない。
+.TP 
+\fBRTLD_NODELETE\fP (glibc 2.2 以降)
+.\" (But it is present on Solaris.)
+\fBdlclose\fP()  中にそのライブラリをアンロードしない。 そのため、同じライブラリをこれ以降に \fBdlopen\fP()
+で再度ロードした場合に、ライブラリ内の静的変数は再初期化されない。 このフラグは POSIX.1\-2001 では規定されていない。
+.TP 
+\fBRTLD_NOLOAD\fP (glibc 2.2 以降)
+.\" (But it is present on Solaris.)
+.\"
+そのライブラリをロードしない。 このフラグはそのライブラリがすでに組み込まれているかを検査するのに 利用できる (\fBdlopen\fP()
+は、ライブラリが組み込まれていなければ NULL を返し、 すでに組み込まれていればそのライブラリのハンドルを返す)。
+また、すでにロードされているライブラリのフラグを昇格させるのにも 利用できる。例えば、過去に \fBRTLD_LOCAL\fP でロードしたライブラリを
+\fBRTLD_NOLOAD\ |\ RTLD_GLOBAL\fP で再オープンすることができる。 このフラグは POSIX.1\-2001
+では規定されていない。
+.TP 
+\fBRTLD_DEEPBIND\fP (glibc 2.3.4 以降)
 .\" Inimitably described by UD in
 .\" http://sources.redhat.com/ml/libc-hacker/2004-09/msg00083.html.
-このライブラリ内のシンボルの参照領域をグローバル領域よりも前に配置する。
-つまり、内蔵型のライブラリでは、すでにロードされたライブラリに含まれる
-同じ名前のグローバルなシンボルよりも自ライブラリ内のシンボルが優先して
-使われる。
-このフラグは POSIX.1-2001 では規定されていない。
+このライブラリ内のシンボルの参照領域をグローバル領域よりも前に配置する。 つまり、内蔵型のライブラリでは、すでにロードされたライブラリに含まれる
+同じ名前のグローバルなシンボルよりも自ライブラリ内のシンボルが優先して 使われる。 このフラグは POSIX.1\-2001 では規定されていない。
 .PP
-.I filename
-が NULL ポインタである場合は、
-返されるハンドルはメイン・プログラムのものになる。
-このハンドルが
-.BR dlsym ()
-に渡されると、シンボルの検索は、メイン・プログラム内、
-プログラムの起動時にロードされる全ての共有ライブラリ、
-.BR dlopen ()
-によって
-.B RTLD_GLOBAL
-フラグ付きでロードされた全ての共有ライブラリ、の順序で行われる。
+\fIfilename\fP が NULL ポインタである場合は、 返されるハンドルはメイン・プログラムのものになる。 このハンドルが \fBdlsym\fP()
+に渡されると、シンボルの検索は、メイン・プログラム内、 プログラムの起動時にロードされる全ての共有ライブラリ、 \fBdlopen\fP()  によって
+\fBRTLD_GLOBAL\fP フラグ付きでロードされた全ての共有ライブラリ、の順序で行われる。
 .PP
-オープンされたライブラリ中での外部参照は、
-そのライブラリの依存リストにあるライブラリか、
-.B RTLD_GLOBAL
-フラグ付きで既にオープンされているライブラリを使って解決される。
-実行ファイルが "\-rdynamic" フラグ ("\-\-export\-dynamic" も同義)
-付きでリンクされている場合は、実行ファイル中のグローバルシンボルも、
-動的にロードされるライブラリ内の参照解決に用いられる。
+オープンされたライブラリ中での外部参照は、 そのライブラリの依存リストにあるライブラリか、 \fBRTLD_GLOBAL\fP
+フラグ付きで既にオープンされているライブラリを使って解決される。 実行ファイルが "\-rdynamic" フラグ ("\-\-export\-dynamic"
+も同義)  付きでリンクされている場合は、実行ファイル中のグローバルシンボルも、 動的にロードされるライブラリ内の参照解決に用いられる。
 .PP
-同じライブラリが
-.BR dlopen ()
-によって再度ロードされた場合には、同じファイルハンドルが返される。
-dl ライブラリはライブラリハンドルのリンク数を管理している。
-したがって動的ライブラリは
-.BR dlclose ()
-が
-.BR dlopen ()
-と同じ回数だけ呼び出されない限りアンロードされない。
-.BR _init ()
-ルーチンは一度だけ呼び出される
-.RB ( _init ()
-が存在する場合のみ)。
-.B RTLD_NOW
-が指定されて
-.BR dlopen ()
-が呼び出された場合、
-.B RTLD_LAZY
+同じライブラリが \fBdlopen\fP()  によって再度ロードされた場合には、同じファイルハンドルが返される。 dl
+ライブラリはライブラリハンドルのリンク数を管理している。 したがって動的ライブラリは \fBdlclose\fP()  が \fBdlopen\fP()
+と同じ回数だけ呼び出されない限りアンロードされない。 \fB_init\fP()  ルーチンは一度だけ呼び出される (\fB_init\fP()
+が存在する場合のみ)。 \fBRTLD_NOW\fP が指定されて \fBdlopen\fP()  が呼び出された場合、 \fBRTLD_LAZY\fP
 で以前にロードされたライブラリのシンボル解決が実行されることがある。
 .PP
-.BR dlopen ()
-は、何らかの理由で失敗すると NULL を返す。
-
-.SS "dlsym()"
-関数
-.BR dlsym ()
-は、
-.BR dlopen ()
-が返した動的ライブラリの「ハンドル」と、
-NULL 終端されたシンボル名の文字列を引き数に取り、
-そのシンボルがロードされたメモリのアドレスを返す。
-シンボルが、指定されたライブラリと、指定されたライブラリがロードされる際に
-.BR dlopen ()
-が自動的にロードしてライブラリのいずれにも見つからない場合には、
-.BR dlsym ()
-は NULL を返す
-.RB ( dlsym ()
-による検索は、これらのライブラリの依存関係のツリーを先頭から
-辿って行われる)。
-実際にはシンボルの値自体が NULL になることもある (そのため、
-.BR dlsym ()
-の返り値が NULL であったとしても必ずしもエラーという訳ではない)。
-エラーかどうかを確認する正しい方法は以下の通りである:
-.BR dlerror ()
-を呼び出して以前のエラー状態をクリアしてから、
-.BR dlsym ()
-を呼び出す。その後でもう一度
-.BR dlerror ()
-を呼び出して、
-.BR dlerror ()
-の返り値を変数に保存し、保存した値が NULL であるか判定する。
+\fBdlopen\fP()  は、何らかの理由で失敗すると NULL を返す。
+.SS dlsym()
+関数 \fBdlsym\fP()  は、 \fBdlopen\fP()  が返した動的ライブラリの「ハンドル」と、 NULL
+終端されたシンボル名の文字列を引き数に取り、 そのシンボルがロードされたメモリのアドレスを返す。
+シンボルが、指定されたライブラリと、指定されたライブラリがロードされる際に \fBdlopen\fP()
+が自動的にロードしてライブラリのいずれにも見つからない場合には、 \fBdlsym\fP()  は NULL を返す (\fBdlsym\fP()
+による検索は、これらのライブラリの依存関係のツリーを先頭から 辿って行われる)。 実際にはシンボルの値自体が NULL になることもある (そのため、
+\fBdlsym\fP()  の返り値が NULL であったとしても必ずしもエラーという訳ではない)。 エラーかどうかを確認する正しい方法は以下の通りである:
+\fBdlerror\fP()  を呼び出して以前のエラー状態をクリアしてから、 \fBdlsym\fP()  を呼び出す。その後でもう一度
+\fBdlerror\fP()  を呼び出して、 \fBdlerror\fP()  の返り値を変数に保存し、保存した値が NULL であるか判定する。
 .PP
-.B RTLD_DEFAULT
-と
-.B RTLD_NEXT
-という二つの特別な擬似ハンドルがある。
-.B RTLD_DEFAULT
-は、デフォルトのライブラリ検索順序にしたがって、
-検索対象のシンボルが最初に現れるところを探す。
-.B RTLD_NEXT
-は、ライブラリ検索順序の中で現在のライブラリ以降で最初に
-関数が現れるところを探す。この機能を使うことで、別の共有ライブラリの
+\fBRTLD_DEFAULT\fP と \fBRTLD_NEXT\fP という二つの特別な擬似ハンドルがある。 \fBRTLD_DEFAULT\fP
+は、デフォルトのライブラリ検索順序にしたがって、 検索対象のシンボルが最初に現れるところを探す。 \fBRTLD_NEXT\fP
+は、ライブラリ検索順序の中で現在のライブラリ以降で最初に 関数が現れるところを探す。この機能を使うことで、別の共有ライブラリの
 関数へのラッパーを提供することができる。
-.SS "dlclose()"
-関数
-.BR dlclose ()
-は動的ライブラリのハンドル
-.I handle
-の参照カウントを 1 減らす。参照カウントが 0 になり、ロードされている
-他のライブラリからそのライブラリ内のシンボルが使われていなければ、
-その動的ライブラリをアンロードする。
+.SS dlclose()
+関数 \fBdlclose\fP()  は動的ライブラリのハンドル \fIhandle\fP の参照カウントを 1 減らす。参照カウントが 0
+になり、ロードされている 他のライブラリからそのライブラリ内のシンボルが使われていなければ、 その動的ライブラリをアンロードする。
 .LP
-関数
-.BR dlclose ()
-は、成功した場合は 0 を返し、エラーの場合 0 以外を返す。
+関数 \fBdlclose\fP()  は、成功した場合は 0 を返し、エラーの場合 0 以外を返す。
 .SS "廃止されたシンボル _init() と _fini()"
-リンカは
-.B _init
-と
-.B _fini
-を特別なシンボルと解釈する。
-ある動的ライブラリで
-.BR _init ()
-という名前のルーチンがエクスポートされていれば、
-そのコードは、ライブラリのロード後、かつ
-.BR dlopen ()
-が復帰する前に実行される。
-その動的ライブラリで
-.BR _fini ()
-という名前のルーチンがエクスポートされていれば、
-ライブラリがアンロードされる直前にそのルーチンが呼び出される。
-システムの起動ファイルに対するリンクを避ける必要がある場合、
-.BR gcc (1)
-のコマンドラインに
-.I \-nostartfiles
-オプションを指定すればよい。
+リンカは \fB_init\fP と \fB_fini\fP を特別なシンボルと解釈する。 ある動的ライブラリで \fB_init\fP()
+という名前のルーチンがエクスポートされていれば、 そのコードは、ライブラリのロード後、かつ \fBdlopen\fP()  が復帰する前に実行される。
+その動的ライブラリで \fB_fini\fP()  という名前のルーチンがエクスポートされていれば、
+ライブラリがアンロードされる直前にそのルーチンが呼び出される。 システムの起動ファイルに対するリンクを避ける必要がある場合、 \fBgcc\fP(1)
+のコマンドラインに \fI\-nostartfiles\fP オプションを指定すればよい。
 .LP
-このルーチンや、gcc のオプション
-.B \-nostartfiles
-や
-.B \-nostdlib
-は使用しないことを推奨する。
-これらを使うと、望ましくない動作をすることがある。
-なぜなら、(特別な措置が行われない限り) これらの constructor/destructor
-ルーチンは実行されないからである。
 .\" void _init(void) __attribute__((constructor));
 .\" void _fini(void) __attribute__((destructor));
+このルーチンや、gcc のオプション \fB\-nostartfiles\fP や \fB\-nostdlib\fP は使用しないことを推奨する。
+これらを使うと、望ましくない動作をすることがある。 なぜなら、(特別な措置が行われない限り) これらの constructor/destructor
+ルーチンは実行されないからである。
 .LP
-代わりに、ライブラリは
-.B __attribute__((constructor))
-や
-.B __attribute__((destructor))
-の関数属性を使って必要なルーチンをエクスポートするのがよい。
-これらについては gcc の info ページを参照のこと。
-constructor ルーチンは
-.BR dlopen ()
-が復帰する前に実行され、
-destructor ルーチンは
-.BR dlclose ()
-が復帰する前に実行される。
-.SS GNU での拡張: dladdr() と dlvsym()
-glibc では POSIX には記載されていない関数が 2つ追加されている。
-プロトタイプは以下の通りである。
+代わりに、ライブラリは \fB__attribute__((constructor))\fP や \fB__attribute__((destructor))\fP
+の関数属性を使って必要なルーチンをエクスポートするのがよい。 これらについては gcc の info ページを参照のこと。 constructor
+ルーチンは \fBdlopen\fP()  が復帰する前に実行され、 destructor ルーチンは \fBdlclose\fP()  が復帰する前に実行される。
+.SS "GNU での拡張: dladdr() と dlvsym()"
+glibc では POSIX には記載されていない関数が 2つ追加されている。 プロトタイプは以下の通りである。
 .sp
 .nf
-.BR "#define _GNU_SOURCE" "         /* feature_test_macros(7) 参照 */"
-.B #include <dlfcn.h>
+\fB#define _GNU_SOURCE\fP         /* feature_test_macros(7) 参照 */
+\fB#include <dlfcn.h>\fP
 .sp
-.BI "int dladdr(void *" addr ", Dl_info *" info );
+\fBint dladdr(void *\fP\fIaddr\fP\fB, Dl_info *\fP\fIinfo\fP\fB);\fP
 .sp
-.BI "void *dlvsym(void *" handle ", char *" symbol ", char *" version );
+\fBvoid *dlvsym(void *\fP\fIhandle\fP\fB, char *\fP\fIsymbol\fP\fB, char *\fP\fIversion\fP\fB);\fP
 .fi
 .PP
-関数
-.BR dladdr ()
-は、関数のポインタを引き数にとり、関数の名前と関数が定義されている
-ファイルの解決を試みる。情報は
-.I Dl_info
+関数 \fBdladdr\fP()  は、関数のポインタを引き数にとり、関数の名前と関数が定義されている ファイルの解決を試みる。情報は \fIDl_info\fP
 構造体に格納される。
 .sp
 .in +4n
@@ -377,93 +204,43 @@ typedef struct {
 .fi
 .in
 .PP
-.I addr
-にマッチするシンボルが見つからなかった場合、
-.I dli_sname
-と
-.I dli_saddr
-は NULL にセットされる。
+\fIaddr\fP にマッチするシンボルが見つからなかった場合、 \fIdli_sname\fP と \fIdli_saddr\fP は NULL にセットされる。
 .PP
-.BR dladdr ()
-は、エラー時には 0 を返し、成功した場合は 0 以外を返す。
+\fBdladdr\fP()  は、エラー時には 0 を返し、成功した場合は 0 以外を返す。
 .PP
-関数
-.BR dlvsym ()
-は
-.BR dlsym ()
-と同じ動作をするが、バージョンの文字列を渡す引き数が
-追加されている点が異なる
-.RB ( dlvsym ()
-はバージョン 2.1 以降の glibc で提供されている)。
+関数 \fBdlvsym\fP()  は \fBdlsym\fP()  と同じ動作をするが、バージョンの文字列を渡す引き数が 追加されている点が異なる
+(\fBdlvsym\fP()  はバージョン 2.1 以降の glibc で提供されている)。
 .SH 準拠
-POSIX.1-2003 には
-.BR dlclose (),
-.BR dlerror (),
-.BR dlopen (),
-.BR dlsym ().
+POSIX.1\-2003 には \fBdlclose\fP(), \fBdlerror\fP(), \fBdlopen\fP(), \fBdlsym\fP().
 の記載がある。
 .SH 注意
-シンボル
-.B RTLD_DEFAULT
-と
-.B RTLD_NEXT
-は
-.I <dlfcn.h>
-で定義されており、
-.I <dlfcn.h>
-のインクルード前に
-.B _GNU_SOURCE
-が定義されている場合のみ有効となる。
 .\" .LP
+.\" The string returned by
 .\" .BR dlerror ()
-.\" が返す文字列は変更すべきではない。システムによっては、
-.\" 以下のようなプロトタイプになっている。
+.\" should not be modified.
+.\" Some systems give the prototype as
 .\" .sp
 .\" .in +5
 .\" .B "const char *dlerror(void);"
 .\" .in
+シンボル \fBRTLD_DEFAULT\fP と \fBRTLD_NEXT\fP は \fI<dlfcn.h>\fP で定義されており、
+\fI<dlfcn.h>\fP のインクルード前に \fB_GNU_SOURCE\fP が定義されている場合のみ有効となる。
 
-glibc 2.2.3 以降では、
-.BR atexit (3)
-を使って、ライブラリがアンロードされる際に自動的に呼び出される
-終了ハンドラ (exit handler) を登録することができる。
+glibc 2.2.3 以降では、 \fBatexit\fP(3)  を使って、ライブラリがアンロードされる際に自動的に呼び出される 終了ハンドラ (exit
+handler) を登録することができる。
 .SS 歴史
-dlopen インターフェースの標準は SunOS をもとにしている。
-SunOS には
-.BR dladdr ()
-もあったが、
-.BR dlvsym ()
+dlopen インターフェースの標準は SunOS をもとにしている。 SunOS には \fBdladdr\fP()  もあったが、 \fBdlvsym\fP()
 はなかった。
 .SH バグ
-時として、
-.BR dladdr ()
-に渡した関数ポインタは驚くような値になることがある。
-いくつかのアーキテクチャ (特に i386 と x86_64) では、
-引き数として使用した関数が動的リンクライブラリで定義されるもので
-あったとしても、
-.I dli_fname
-と
-.I dli_fbase
-が
-.BR dladdr ()
-を呼び出したオブジェクトを参照した状態で終わっていることがある。
+時として、 \fBdladdr\fP()  に渡した関数ポインタは驚くような値になることがある。 いくつかのアーキテクチャ (特に i386 と
+x86_64) では、 引き数として使用した関数が動的リンクライブラリで定義されるもので あったとしても、 \fIdli_fname\fP と
+\fIdli_fbase\fP が \fBdladdr\fP()  を呼び出したオブジェクトを参照した状態で終わっていることがある。
 .PP
-問題は、関数ポインタの解決は今なおコンパイル時に行われるが、
-そのポインタは元のオブジェクトの
-.I plt
-(Procedure Linkage Table) セクションを指しているだけだという点にある
-(オブジェクト自体は、ダイナミックリンカによってシンボルの解決が行われた後に、
-関数の呼び出しを行う)。
-これに対処する方法としては、
-コードを position-independent でコンパイルするという方法がある。
-そうすると、コンパイラはコンパイル時にポインタを用意することができず、
-今日の
-.BR gcc (1)
-では、実行時に
-.BR dladdr ()
-に関数ポインタを渡す前に、
-.I got
-(Global Offset Table) から最終的なシンボルのアドレスをロードするだけの
+問題は、関数ポインタの解決は今なおコンパイル時に行われるが、 そのポインタは元のオブジェクトの \fIplt\fP (Procedure Linkage
+Table) セクションを指しているだけだという点にある (オブジェクト自体は、ダイナミックリンカによってシンボルの解決が行われた後に、
+関数の呼び出しを行う)。 これに対処する方法としては、 コードを position\-independent でコンパイルするという方法がある。
+そうすると、コンパイラはコンパイル時にポインタを用意することができず、 今日の \fBgcc\fP(1)  では、実行時に \fBdladdr\fP()
+に関数ポインタを渡す前に、 \fIgot\fP (Global Offset Table) から最終的なシンボルのアドレスをロードするだけの
 コードが生成される。
 .SH 例
 math ライブラリをロードし、2.0 の余弦を表示する
@@ -495,8 +272,8 @@ main(int argc, char **argv)
        Corrigendum 1) workaround; see the Rationale for the
        POSIX specification of dlsym(). */
 
-    *(void **) (&cosine) = dlsym(handle, "cos");
 .\" But in fact "gcc -O2 -Wall" will complain about the preceding cast.
+    *(void **) (&cosine) = dlsym(handle, "cos");
 
     if ((error = dlerror()) != NULL)  {
         fprintf(stderr, "%s\en", error);
@@ -509,28 +286,18 @@ main(int argc, char **argv)
 }
 .fi
 .PP
-このプログラムを "foo.c" に書いたとすると、以下のコマンドでプログラムを
-ビルドできる。
+このプログラムを "foo.c" に書いたとすると、以下のコマンドでプログラムを ビルドできる。
 .in +4n
 .LP
     gcc \-rdynamic \-o foo foo.c \-ldl
 .in
 .PP
-.BR _init ()
-と
-.BR _fini ()
-をエクスポートするライブラリの場合は
-以下のようにしてコンパイルする必要がある。
-例として \fIbar.c\fP をコンパイルする場合:
+\fB_init\fP()  と \fB_fini\fP()  をエクスポートするライブラリの場合は 以下のようにしてコンパイルする必要がある。 例として
+\fIbar.c\fP をコンパイルする場合:
 .in +4n
 .LP
     gcc \-shared \-nostartfiles \-o bar bar.c
 .in
 .SH 関連項目
-.BR ld (1),
-.BR ldd (1),
-.BR dl_iterate_phdr (3),
-.BR rtld-audit (7),
-.BR ld.so (8),
-.BR ldconfig (8),
-ld.so info pages, gcc info pages, ld info pages
+\fBld\fP(1), \fBldd\fP(1), \fBdl_iterate_phdr\fP(3), \fBrtld\-audit\fP(7), \fBld.so\fP(8),
+\fBldconfig\fP(8), ld.so info pages, gcc info pages, ld info pages