OSDN Git Service

Update README
[linuxjm/LDP_man-pages.git] / release / man3 / dlopen.3
index dbb48f0..4df8827 100644 (file)
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH DLOPEN 3 2008\-12\-06 Linux "Linux Programmer's Manual"
+.\"
+.\" 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
+.\"
+.TH DLOPEN 3 2014\-10\-02 Linux "Linux Programmer's Manual"
 .SH 名前
-dlclose, dlerror, dlopen, dlsym \- 動的リンクを行うローダへの プログラミングインターフェース
+dlclose, dlerror, dlopen, dlsym \- å\8b\95ç\9a\84ã\83ªã\83³ã\82¯ã\82\92è¡\8cã\81\86ã\83­ã\83¼ã\83\80ã\83¼ã\81¸ã\81® ã\83\97ã\83­ã\82°ã\83©ã\83\9fã\83³ã\82°ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹
 .SH 書式
 \fB#include <dlfcn.h>\fP
 .sp
@@ -54,34 +67,34 @@ dlclose, dlerror, dlopen, dlsym \- 動的リンクを行うローダへの プ
 \fI\-ldl\fP でリンクする。
 .SH 説明
 \fBdlopen\fP(), \fBdlsym\fP(), \fBdlclose\fP(), \fBdlerror\fP()  の 4つの関数は、動的リンク (dynamic
-linking) ã\82\92è¡\8cã\81\86ã\83­ã\83¼ã\83\80ã\81¸ã\81® ã\82¤ã\83³ã\82¿フェースを実装したものである。
+linking) ã\82\92è¡\8cã\81\86ã\83­ã\83¼ã\83\80ã\83¼ã\81¸ã\81® ã\82¤ã\83³ã\82¿ã\83¼フェースを実装したものである。
 .SS dlerror()
 関数 \fBdlerror\fP()  は、前回 \fBdlerror\fP()  が呼び出された後に、 \fBdlopen\fP(), \fBdlsym\fP(),
 \fBdlclose\fP()  のいずれかで最後に発生したエラーについての説明メッセージを返す。
 初期化後または前回呼び出された後で、エラーが発生していなければ NULL を返す。
 .SS dlopen()
-関数 \fBdlopen\fP()  は、NULL 終端された文字列 \fIfilename\fP で指定されたファイル名の動的ライブラリ (dynamic
+関数 \fBdlopen\fP()  は、ヌル終端された文字列 \fIfilename\fP で指定されたファイル名の動的ライブラリ (dynamic
 library) をロードし、 その動的ライブラリへの内部「ハンドル」を返す。 \fIfilename\fP が NULL
\81®å ´å\90\88ã\80\81ã\83¡ã\82¤ã\83³ã\83»ã\83\97ã\83­ã\82°ã\83©ã\83 ã\81¸ã\81®ã\83\8fã\83³ã\83\89ã\83«ã\81\8cè¿\94ã\81\95ã\82\8cã\82\8bã\80\82 \fIfilename\fP ã\81\8cã\82¹ã\83©ã\83\83ã\82·ã\83¥ ("/")
-を含む場合、(相対か絶対かの)パス名として解釈される。 それ以外の場合、動的リンカは以下の手順でライブラリを検索する (詳細は \fBld.so\fP(8)
+の場合、メインプログラムへのハンドルが返される。 \fIfilename\fP がスラッシュ ("/")
\82\92å\90«ã\82\80å ´å\90\88ã\80\81\9b¸å¯¾ã\81\8b絶対ã\81\8bã\81®)ã\83\91ã\82¹å\90\8dã\81¨ã\81\97ã\81¦è§£é\87\88ã\81\95ã\82\8cã\82\8bã\80\82 ã\81\9dã\82\8c以å¤\96ã\81®å ´å\90\88ã\80\81å\8b\95ç\9a\84ã\83ªã\83³ã\82«ã\83¼ã\81¯ä»¥ä¸\8bã\81®æ\89\8bé \86ã\81§ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\82\92æ¤\9cç´¢ã\81\99ã\82\8b (詳細ã\81¯ \fBld.so\fP(8)
 を参照):
 .IP o 4
 (ELF のみ) 呼び出し元プログラムの実行ファイルに DT_RPATH タグが含まれており、 DT_RUNPATH
\82¿ã\82°ã\81\8cå\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\81ªã\81\84å ´å\90\88ã\80\81DT_RPATH ã\82¿ã\82°ã\81«æ\9b¸ã\81\8bã\82\8cã\81¦ã\81\84ã\82\8b ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83»ã\83ªã\82¹ã\83\88ã\82\92æ¤\9cç´¢ã\81\99ã\82\8bã\80\82
+タグが含まれていない場合、DT_RPATH タグに書かれている ディレクトリリストを検索する。
 .IP o
 プログラムの開始時に環境変数 \fBLD_LIBRARY_PATH\fP にコロン区切りのディレクトリのリストが定義されていれば、
 この環境変数に定義されたディレクトリが検索される (セキュリティ上の理由で、この変数は set\-UID や set\-GID された
 プログラムの場合は無視される)。
 .IP o
 (ELF のみ) 呼び出し元プログラムの実行ファイルに DT_RUNPATH タグが含まれて
\81\84ã\82\8bå ´å\90\88ã\80\81ã\81\9dã\81®ã\82¿ã\82°ã\81«æ\9b¸ã\81\8bã\82\8cã\81¦ã\81\84ã\82\8bã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83»ã\83ªã\82¹ã\83\88ã\82\92æ¤\9cç´¢ã\81\99ã\82\8bã\80\82
+いる場合、そのタグに書かれているディレクトリリストを検索する。
 .IP o
-キャッシュファイル \fI/etc/ld.so.cache\fP の中に \fIfilename\fP のエントリが入っているかをチェックする
\82­ã\83£ã\83\83ã\82·ã\83¥ã\83\95ã\82¡ã\82¤ã\83« \fI/etc/ld.so.cache\fP ã\81®ä¸­ã\81« \fIfilename\fP ã\81®ã\82¨ã\83³ã\83\88ã\83ªã\83¼ã\81\8cå\85¥ã\81£ã\81¦ã\81\84ã\82\8bã\81\8bã\82\92ã\83\81ã\82§ã\83\83ã\82¯ã\81\99ã\82\8b
 (\fB/etc/ld.so.cache\fP は \fBldconfig\fP(8)  によって管理されている)。
 .IP o
 ディレクトリ \fI/lib\fP と \fI/usr/lib\fP をこの順番で検索する。
 .PP
-そのライブラリが他の共有ライブラリに依存している場合は、 依存しているライブラリも動的リンカが同じ検索ルールに基づいて 自動的にロードする
\81\9dã\81®ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\81\8cä»\96ã\81®å\85±æ\9c\89ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\81«ä¾\9då­\98ã\81\97ã\81¦ã\81\84ã\82\8bå ´å\90\88ã\81¯ã\80\81 ä¾\9då­\98ã\81\97ã\81¦ã\81\84ã\82\8bã\83©ã\82¤ã\83\96ã\83©ã\83ªã\82\82å\8b\95ç\9a\84ã\83ªã\83³ã\82«ã\83¼ã\81\8cå\90\8cã\81\98æ¤\9cç´¢ã\83«ã\83¼ã\83«ã\81«å\9fºã\81¥ã\81\84ã\81¦ è\87ªå\8b\95ç\9a\84ã\81«ã\83­ã\83¼ã\83\89ã\81\99ã\82\8b
 (それらのライブラリにさらに依存関係がある場合などは この処理は再帰的に行われる)。
 .PP
 \fIflag\fP には以下の 2 つの値のいずれかを含めなければならない:
@@ -124,15 +137,15 @@ lazy binding (手抜きなシンボルの結び付け) が行う。 シンボル
 このライブラリ内のシンボルの参照領域をグローバル領域よりも前に配置する。 つまり、内蔵型のライブラリでは、すでにロードされたライブラリに含まれる
 同じ名前のグローバルなシンボルよりも自ライブラリ内のシンボルが優先して 使われる。 このフラグは POSIX.1\-2001 では規定されていない。
 .PP
-\fIfilename\fP ã\81\8c NULL ã\83\9dã\82¤ã\83³ã\82¿ã\81§ã\81\82ã\82\8bå ´å\90\88ã\81¯ã\80\81 è¿\94ã\81\95ã\82\8cã\82\8bã\83\8fã\83³ã\83\89ã\83«ã\81¯ã\83¡ã\82¤ã\83³ã\83»プログラムのものになる。 このハンドルが \fBdlsym\fP()
\81«æ¸¡ã\81\95ã\82\8cã\82\8bã\81¨ã\80\81ã\82·ã\83³ã\83\9cã\83«ã\81®æ¤\9cç´¢ã\81¯ã\80\81ã\83¡ã\82¤ã\83³ã\83»ã\83\97ã\83­ã\82°ã\83©ã\83 å\86\85ã\80\81 ã\83\97ã\83­ã\82°ã\83©ã\83 ã\81®èµ·å\8b\95æ\99\82ã\81«ã\83­ã\83¼ã\83\89ã\81\95ã\82\8cã\82\8bå\85¨ã\81¦ã\81®å\85±æ\9c\89ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\80\81 \fBdlopen\fP()  ã\81«ã\82\88ã\81£ã\81¦
+\fIfilename\fP ã\81\8c NULL ã\81§ã\81\82ã\82\8bå ´å\90\88ã\81¯ã\80\81 è¿\94ã\81\95ã\82\8cã\82\8bã\83\8fã\83³ã\83\89ã\83«ã\81¯ã\83¡ã\82¤ã\83³プログラムのものになる。 このハンドルが \fBdlsym\fP()
+に渡されると、シンボルの検索は、メインプログラム内、 プログラムの起動時にロードされる全ての共有ライブラリ、 \fBdlopen\fP()  によって
 \fBRTLD_GLOBAL\fP フラグ付きでロードされた全ての共有ライブラリ、の順序で行われる。
 .PP
 オープンされたライブラリ中での外部参照は、 そのライブラリの依存リストにあるライブラリか、 \fBRTLD_GLOBAL\fP
 フラグ付きで既にオープンされているライブラリを使って解決される。 実行ファイルが "\-rdynamic" フラグ ("\-\-export\-dynamic"
 も同義)  付きでリンクされている場合は、実行ファイル中のグローバルシンボルも、 動的にロードされるライブラリ内の参照解決に用いられる。
 .PP
\90\8cã\81\98ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\81\8c \fBdlopen\fP()  ã\81«ã\82\88ã\81£ã\81¦å\86\8d度ã\83­ã\83¼ã\83\89ã\81\95ã\82\8cã\81\9få ´å\90\88ã\81«ã\81¯ã\80\81å\90\8cã\81\98ã\83\95ã\82¡ã\82¤ã\83«ハンドルが返される。 dl
\90\8cã\81\98ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\81\8c \fBdlopen\fP()  ã\81«ã\82\88ã\81£ã\81¦å\86\8d度ã\83­ã\83¼ã\83\89ã\81\95ã\82\8cã\81\9få ´å\90\88ã\81«ã\81¯ã\80\81å\90\8cã\81\98ã\83©ã\82¤ã\83\96ã\83©ã\83ªハンドルが返される。 dl
 ライブラリはライブラリハンドルのリンク数を管理している。 したがって動的ライブラリは \fBdlclose\fP()  が \fBdlopen\fP()
 と同じ回数だけ呼び出されない限りアンロードされない。 \fB_init\fP()  ルーチンは一度だけ呼び出される (\fB_init\fP()
 が存在する場合のみ)。 \fBRTLD_NOW\fP が指定されて \fBdlopen\fP()  が呼び出された場合、 \fBRTLD_LAZY\fP
@@ -141,7 +154,7 @@ lazy binding (手抜きなシンボルの結び付け) が行う。 シンボル
 \fBdlopen\fP()  は、何らかの理由で失敗すると NULL を返す。
 .SS dlsym()
 関数 \fBdlsym\fP()  は、 \fBdlopen\fP()  が返した動的ライブラリの「ハンドル」と、 NULL
-終端されたシンボル名の文字列を引き数に取り、 そのシンボルがロードされたメモリのアドレスを返す。
+çµ\82端ã\81\95ã\82\8cã\81\9fã\82·ã\83³ã\83\9cã\83«å\90\8dã\81®æ\96\87å­\97å\88\97ã\82\92å¼\95ã\81\8dæ\95°ã\81«å\8f\96ã\82\8aã\80\81 ã\81\9dã\81®ã\82·ã\83³ã\83\9cã\83«ã\81\8cã\83­ã\83¼ã\83\89ã\81\95ã\82\8cã\81\9fã\83¡ã\83¢ã\83ªã\83¼ã\81®ã\82¢ã\83\89ã\83¬ã\82¹ã\82\92è¿\94ã\81\99ã\80\82
 シンボルが、指定されたライブラリと、指定されたライブラリがロードされる際に \fBdlopen\fP()
 が自動的にロードしてライブラリのいずれにも見つからない場合には、 \fBdlsym\fP()  は NULL を返す (\fBdlsym\fP()
 による検索は、これらのライブラリの依存関係のツリーを先頭から 辿って行われる)。 実際にはシンボルの値自体が NULL になることもある (そのため、
@@ -159,7 +172,7 @@ lazy binding (手抜きなシンボルの結び付け) が行う。 シンボル
 .LP
 関数 \fBdlclose\fP()  は、成功した場合は 0 を返し、エラーの場合 0 以外を返す。
 .SS "廃止されたシンボル _init() と _fini()"
-リンカは \fB_init\fP と \fB_fini\fP を特別なシンボルと解釈する。 ある動的ライブラリで \fB_init\fP()
\83ªã\83³ã\82«ã\83¼ã\81¯ \fB_init\fP ã\81¨ \fB_fini\fP ã\82\92ç\89¹å\88¥ã\81ªã\82·ã\83³ã\83\9cã\83«ã\81¨è§£é\87\88ã\81\99ã\82\8bã\80\82 ã\81\82ã\82\8bå\8b\95ç\9a\84ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\81§ \fB_init\fP()
 という名前のルーチンがエクスポートされていれば、 そのコードは、ライブラリのロード後、かつ \fBdlopen\fP()  が復帰する前に実行される。
 その動的ライブラリで \fB_fini\fP()  という名前のルーチンがエクスポートされていれば、
 ライブラリがアンロードされる直前にそのルーチンが呼び出される。 システムの起動ファイルに対するリンクを避ける必要がある場合、 \fBgcc\fP(1)
@@ -186,8 +199,8 @@ glibc では POSIX には記載されていない関数が 2つ追加されて
 \fBvoid *dlvsym(void *\fP\fIhandle\fP\fB, char *\fP\fIsymbol\fP\fB, char *\fP\fIversion\fP\fB);\fP
 .fi
 .PP
\96¢æ\95° \fBdladdr\fP()  ã\81¯ã\80\81é\96¢æ\95°ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\82\92å¼\95ã\81\8dæ\95°ã\81«ã\81¨ã\82\8aã\80\81é\96¢æ\95°ã\81®å\90\8då\89\8dã\81¨é\96¢æ\95°ã\81\8cå®\9a義ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8b ã\83\95ã\82¡ã\82¤ã\83«ã\81®è§£æ±ºã\82\92試ã\81¿ã\82\8bã\80\82æ\83\85å ±ã\81¯ \fIDl_info\fP
-構造体に格納される。
\96¢æ\95° \fBdladdr\fP()  ã\81¯ã\80\81é\96¢æ\95°ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\82\92å¼\95ã\81\8dæ\95°ã\81«ã\81¨ã\82\8aã\80\81é\96¢æ\95°ã\81®å\90\8då\89\8dã\81¨é\96¢æ\95°ã\81\8cå®\9a義ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8b ã\83\95ã\82¡ã\82¤ã\83«ã\81®è§£æ±ºã\82\92試ã\81¿ã\82\8bã\80\82æ\83\85å ±ã\81¯
+\fIDl_info\fP 構造体に格納される。
 .sp
 .in +4n
 .nf
@@ -196,8 +209,8 @@ typedef struct {
                                contains address */
     void       *dli_fbase;  /* Address at which shared object
                                is loaded */
-    const char *dli_sname;  /* Name of nearest symbol with address
-                               lower than \fIaddr\fP */
+    const char *dli_sname;  /* Name of symbol whose definition
+                               overlaps \fIaddr\fP */
     void       *dli_saddr;  /* Exact address of symbol named
                                in \fIdli_sname\fP */
 } Dl_info;
@@ -226,21 +239,21 @@ POSIX.1\-2003 には \fBdlclose\fP(), \fBdlerror\fP(), \fBdlopen\fP(), \fBdlsym\
 シンボル \fBRTLD_DEFAULT\fP と \fBRTLD_NEXT\fP は \fI<dlfcn.h>\fP で定義されており、
 \fI<dlfcn.h>\fP のインクルード前に \fB_GNU_SOURCE\fP が定義されている場合のみ有効となる。
 
-glibc 2.2.3 以降では、 \fBatexit\fP(3)  を使って、ライブラリがアンロードされる際に自動的に呼び出される 終了ハンドラ (exit
-handler) を登録することができる。
+glibc 2.2.3 以降では、 \fBatexit\fP(3)  を使って、ライブラリがアンロードされる際に自動的に呼び出される 終了ハンドラ
+(exit handler) を登録することができる。
 .SS 歴史
 dlopen インターフェースの標準は SunOS をもとにしている。 SunOS には \fBdladdr\fP()  もあったが、 \fBdlvsym\fP()
 はなかった。
 .SH バグ
\99\82ã\81¨ã\81\97ã\81¦ã\80\81 \fBdladdr\fP()  ã\81«æ¸¡ã\81\97ã\81\9fé\96¢æ\95°ã\83\9dã\82¤ã\83³ã\82¿ã\81¯é©\9aã\81\8fã\82\88ã\81\86ã\81ªå\80¤ã\81«ã\81ªã\82\8bã\81\93ã\81¨ã\81\8cã\81\82ã\82\8bã\80\82 ã\81\84ã\81\8fã\81¤ã\81\8bã\81®ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ (特に i386 と
\99\82ã\81¨ã\81\97ã\81¦ã\80\81 \fBdladdr\fP()  ã\81«æ¸¡ã\81\97ã\81\9fé\96¢æ\95°ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\81¯é©\9aã\81\8fã\82\88ã\81\86ã\81ªå\80¤ã\81«ã\81ªã\82\8bã\81\93ã\81¨ã\81\8cã\81\82ã\82\8bã\80\82 ã\81\84ã\81\8fã\81¤ã\81\8bã\81®ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\83¼ (特に i386 と
 x86_64) では、 引き数として使用した関数が動的リンクライブラリで定義されるもので あったとしても、 \fIdli_fname\fP と
 \fIdli_fbase\fP が \fBdladdr\fP()  を呼び出したオブジェクトを参照した状態で終わっていることがある。
 .PP
\95\8fé¡\8cã\81¯ã\80\81é\96¢æ\95°ã\83\9dã\82¤ã\83³ã\82¿ã\81®è§£æ±ºã\81¯ä»\8aã\81ªã\81\8aã\82³ã\83³ã\83\91ã\82¤ã\83«æ\99\82ã\81«è¡\8cã\82\8fã\82\8cã\82\8bã\81\8cã\80\81 ã\81\9dã\81®ã\83\9dã\82¤ã\83³ã\82¿は元のオブジェクトの \fIplt\fP (Procedure Linkage
-Table) セクションを指しているだけだという点にある (オブジェクト自体は、ダイナミックリンカによってシンボルの解決が行われた後に、
\95\8fé¡\8cã\81¯ã\80\81é\96¢æ\95°ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\81®è§£æ±ºã\81¯ä»\8aã\81ªã\81\8aã\82³ã\83³ã\83\91ã\82¤ã\83«æ\99\82ã\81«è¡\8cã\82\8fã\82\8cã\82\8bã\81\8cã\80\81 ã\81\9dã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼は元のオブジェクトの \fIplt\fP (Procedure Linkage
+Table) ã\82»ã\82¯ã\82·ã\83§ã\83³ã\82\92æ\8c\87ã\81\97ã\81¦ã\81\84ã\82\8bã\81 ã\81\91ã\81 ã\81¨ã\81\84ã\81\86ç\82¹ã\81«ã\81\82ã\82\8b (ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88è\87ªä½\93ã\81¯ã\80\81ã\83\80ã\82¤ã\83\8aã\83\9fã\83\83ã\82¯ã\83ªã\83³ã\82«ã\83¼ã\81«ã\82\88ã\81£ã\81¦ã\82·ã\83³ã\83\9cã\83«ã\81®è§£æ±ºã\81\8cè¡\8cã\82\8fã\82\8cã\81\9få¾\8cã\81«ã\80\81
 関数の呼び出しを行う)。 これに対処する方法としては、 コードを position\-independent でコンパイルするという方法がある。
-そうすると、コンパイラはコンパイル時にポインタを用意することができず、 今日の \fBgcc\fP(1)  では、実行時に \fBdladdr\fP()
-に関数ポインタを渡す前に、 \fIgot\fP (Global Offset Table) から最終的なシンボルのアドレスをロードするだけの
\81\9dã\81\86ã\81\99ã\82\8bã\81¨ã\80\81ã\82³ã\83³ã\83\91ã\82¤ã\83©ã\81¯ã\82³ã\83³ã\83\91ã\82¤ã\83«æ\99\82ã\81«ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\82\92ç\94¨æ\84\8fã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81\9aã\80\81 ä»\8aæ\97¥ã\81® \fBgcc\fP(1)  ã\81§ã\81¯ã\80\81å®\9fè¡\8cæ\99\82ã\81« \fBdladdr\fP()
\81«é\96¢æ\95°ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\82\92渡ã\81\99å\89\8dã\81«ã\80\81 \fIgot\fP (Global Offset Table) ã\81\8bã\82\89æ\9c\80çµ\82ç\9a\84ã\81ªã\82·ã\83³ã\83\9cã\83«ã\81®ã\82¢ã\83\89ã\83¬ã\82¹ã\82\92ã\83­ã\83¼ã\83\89ã\81\99ã\82\8bã\81 ã\81\91ã\81®
 コードが生成される。
 .SH 例
 math ライブラリをロードし、2.0 の余弦を表示する
@@ -265,17 +278,30 @@ main(int argc, char **argv)
 
     dlerror();    /* Clear any existing error */
 
-    /* Writing: cosine = (double (*)(double)) dlsym(handle, "cos");
-       would seem more natural, but the C99 standard leaves
-       casting from "void *" to a function pointer undefined.
-       The assignment used below is the POSIX.1\-2003 (Technical
-       Corrigendum 1) workaround; see the Rationale for the
-       POSIX specification of dlsym(). */
+    cosine = (double (*)(double)) dlsym(handle, "cos");
+
+    /* ISO の C 標準によれば、上のような、関数ポインターと 'void *' 間の
+       キャストを行った場合に得られる結果は不定である。
+       POSIX.1\-2003 と POSIX.1\-2008 では、この状況は認められており、
+       以下のようなワークアラウンドが提案されている。
+
+           *(void **) (&cosine) = dlsym(handle, "cos");
+
+       この (ぶかっこうな) キャストは ISO の C 標準に従っており、
+       コンパイラの警告を避けることができる。
 
-.\" But in fact "gcc -O2 -Wall" will complain about the preceding cast.
-    *(void **) (&cosine) = dlsym(handle, "cos");
+.\" http://pubs.opengroup.org/onlinepubs/009695399/functions/dlsym.html#tag_03_112_08
+.\" http://pubs.opengroup.org/onlinepubs/9699919799/functions/dlsym.html#tag_16_96_07
+.\" http://austingroupbugs.net/view.php?id=74
+       POSIX.1\-2008 の 2013 Technical Corrigendum (別名 POSIX.1\-2013)
+       では、 POSIX に準拠する実装では 'void *' から関数ポインターへの
+       キャストをサポートすることが要求されるようになり、状況が改善
+       された。にもかかわらず、('\-pedantic' オプションを指定した gcc
+       などの) いくつかのコンパイラは、このプログラムで使用されている
+       キャストについて文句を言うのだ。
 
-    if ((error = dlerror()) != NULL)  {
+    error = dlerror();
+    if (error != NULL) {
         fprintf(stderr, "%s\en", error);
         exit(EXIT_FAILURE);
     }
@@ -299,11 +325,11 @@ main(int argc, char **argv)
     gcc \-shared \-nostartfiles \-o bar bar.c
 .in
 .SH 関連項目
-\fBld\fP(1), \fBldd\fP(1), \fBdl_iterate_phdr\fP(3), \fBrtld\-audit\fP(7), \fBld.so\fP(8),
-\fBldconfig\fP(8)
+\fBld\fP(1), \fBldd\fP(1), \fBpldd\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
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.52 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。