OSDN Git Service

Import translated manuals from JM CVS Repository.
[linuxjm/jm.git] / manual / LDP_man-pages / release / man3 / dlopen.3
1 .\" -*- nroff -*-
2 .\" Copyright 1995 Yggdrasil Computing, Incorporated.
3 .\" written by Adam J. Richter (adam@yggdrasil.com),
4 .\" with typesetting help from Daniel Quinlan (quinlan@yggdrasil.com).
5 .\" and Copyright 2003 Michael Kerrisk (mtk.manpages@gmail.com).
6 .\"
7 .\" This is free documentation; you can redistribute it and/or
8 .\" modify it under the terms of the GNU General Public License as
9 .\" published by the Free Software Foundation; either version 2 of
10 .\" the License, or (at your option) any later version.
11 .\"
12 .\" The GNU General Public License's references to "object code"
13 .\" and "executables" are to be interpreted as the output of any
14 .\" document formatting or typesetting system, including
15 .\" intermediate and printed output.
16 .\"
17 .\" This manual is distributed in the hope that it will be useful,
18 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
19 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 .\" GNU General Public License for more details.
21 .\"
22 .\" You should have received a copy of the GNU General Public
23 .\" License along with this manual; if not, write to the Free
24 .\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
25 .\" USA.
26 .\"
27 .\" Modified by David A. Wheeler <dwheeler@dwheeler.com> 2000-11-28.
28 .\" Applied patch by Terran Melconian, aeb, 2001-12-14.
29 .\" Modified by Hacksaw <hacksaw@hacksaw.org> 2003-03-13.
30 .\" Modified by Matt Domsch, 2003-04-09: _init and _fini obsolete
31 .\" Modified by Michael Kerrisk <mtk.manpages@gmail.com> 2003-05-16.
32 .\" Modified by Walter Harms: dladdr, dlvsym
33 .\" Modified by Petr Baudis <pasky@suse.cz>, 2008-12-04: dladdr caveat
34 .\"
35 .\" Japanese Version Copyright (c) 1998 NAKANO Takeo all rights reserved.
36 .\" Translated Sat May 23 1998 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
37 .\" Updated & Modified 1999-09-14, NAKANO Takeo
38 .\" Modified 2000-03-19, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
39 .\" Updated 2001-02-16, Kentaro Shirakata <argrath@ub32.org>
40 .\" Updated 2001-12-21, Kentaro Shirakata <argrath@ub32.org>
41 .\" Updated 2002-10-21, Kentaro Shirakata <argrath@ub32.org>
42 .\" Updated 2003-09-01, Kentaro Shirakata <argrath@ub32.org>
43 .\" Updated 2005-03-15, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
44 .\" Updated 2006-01-20, Akihiro MOTOKI
45 .\" Updated 2009-03-02, Akihiro MOTOKI, LDP v3.19
46 .\"
47 .\"WORD:        linker                  ¥ê¥ó¥«
48 .\"WORD:        dynamic linking         Æ°Åª¥ê¥ó¥¯
49 .\"WORD:        dynamic library         Æ°Åª¥é¥¤¥Ö¥é¥ê
50 .\"
51 .TH DLOPEN 3 2008-12-06 "Linux" "Linux Programmer's Manual"
52 .SH Ì¾Á°
53 dlclose, dlerror, dlopen, dlsym \- Æ°Åª¥ê¥ó¥¯¤ò¹Ô¤¦¥í¡¼¥À¤Ø¤Î
54 ¥×¥í¥°¥é¥ß¥ó¥°¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹
55 .SH ½ñ¼°
56 .B #include <dlfcn.h>
57 .sp
58 .BI "void *dlopen(const char *" filename ", int " flag );
59 .sp
60 .B "char *dlerror(void);"
61 .sp
62 .BI "void *dlsym(void *" handle ", const char *" symbol );
63 .sp
64 .BI "int dlclose(void *" handle );
65 .sp
66 \fI\-ldl\fP ¤Ç¥ê¥ó¥¯¤¹¤ë¡£
67 .SH ÀâÌÀ
68 .BR dlopen (),
69 .BR dlsym (),
70 .BR dlclose (),
71 .BR dlerror ()
72 ¤Î 4¤Ä¤Î´Ø¿ô¤Ï¡¢Æ°Åª¥ê¥ó¥¯ (dynamic linking) ¤ò¹Ô¤¦¥í¡¼¥À¤Ø¤Î
73 ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¤â¤Î¤Ç¤¢¤ë¡£
74 .SS "dlerror()"
75 ´Ø¿ô
76 .BR dlerror ()
77 ¤Ï¡¢Á°²ó
78 .BR dlerror ()
79 ¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿¸å¤Ë¡¢
80 .BR dlopen (),
81 .BR dlsym (),
82 .BR dlclose ()
83 ¤Î¤¤¤º¤ì¤«¤ÇºÇ¸å¤ËȯÀ¸¤·¤¿¥¨¥é¡¼¤Ë¤Ä¤¤¤Æ¤ÎÀâÌÀ¥á¥Ã¥»¡¼¥¸¤òÊÖ¤¹¡£
84 ½é´ü²½¸å¤Þ¤¿¤ÏÁ°²ó¸Æ¤Ó½Ð¤µ¤ì¤¿¸å¤Ç¡¢¥¨¥é¡¼¤¬È¯À¸¤·¤Æ¤¤¤Ê¤±¤ì¤Ð NULL ¤òÊÖ¤¹¡£
85 .SS "dlopen()"
86 ´Ø¿ô
87 .BR dlopen ()
88 ¤Ï¡¢NULL ½ªÃ¼¤µ¤ì¤¿Ê¸»úÎó
89 .I filename
90 ¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë̾¤ÎưŪ¥é¥¤¥Ö¥é¥ê (dynamic library) ¤ò¥í¡¼¥É¤·¡¢
91 ¤½¤ÎưŪ¥é¥¤¥Ö¥é¥ê¤Ø¤ÎÆâÉô¡Ö¥Ï¥ó¥É¥ë¡×¤òÊÖ¤¹¡£
92 .I filename
93 ¤¬ NULL ¤Î¾ì¹ç¡¢¥á¥¤¥ó¡¦¥×¥í¥°¥é¥à¤Ø¤Î¥Ï¥ó¥É¥ë¤¬ÊÖ¤µ¤ì¤ë¡£
94 .I filename
95 ¤¬¥¹¥é¥Ã¥·¥å ("/") ¤ò´Þ¤à¾ì¹ç¡¢(ÁêÂФ«ÀäÂФ«¤Î)¥Ñ¥¹Ì¾¤È¤·¤Æ²ò¼á¤µ¤ì¤ë¡£
96 ¤½¤ì°Ê³°¤Î¾ì¹ç¡¢Æ°Åª¥ê¥ó¥«¤Ï°Ê²¼¤Î¼ê½ç¤Ç¥é¥¤¥Ö¥é¥ê¤ò¸¡º÷¤¹¤ë
97 (¾ÜºÙ¤Ï
98 .BR ld.so (8)
99 ¤ò»²¾È):
100 .IP o 4
101 (ELF ¤Î¤ß) ¸Æ¤Ó½Ð¤·¸µ¥×¥í¥°¥é¥à¤Î¼Â¹Ô¥Õ¥¡¥¤¥ë¤Ë DT_RPATH ¥¿¥°¤¬´Þ¤Þ¤ì¤Æ¤ª¤ê¡¢
102 DT_RUNPATH ¥¿¥°¤¬´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢DT_RPATH ¥¿¥°¤Ë½ñ¤«¤ì¤Æ¤¤¤ë
103 ¥Ç¥£¥ì¥¯¥È¥ê¡¦¥ê¥¹¥È¤ò¸¡º÷¤¹¤ë¡£
104 .IP o
105 ¥×¥í¥°¥é¥à¤Î³«»Ï»þ¤Ë´Ä¶­ÊÑ¿ô
106 .B LD_LIBRARY_PATH
107 ¤Ë¥³¥í¥ó¶èÀÚ¤ê¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î¥ê¥¹¥È¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢
108 ¤³¤Î´Ä¶­ÊÑ¿ô¤ËÄêµÁ¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤¬¸¡º÷¤µ¤ì¤ë
109 (¥»¥­¥å¥ê¥Æ¥£¾å¤ÎÍýͳ¤Ç¡¢¤³¤ÎÊÑ¿ô¤Ï set-UID ¤ä set-GID ¤µ¤ì¤¿
110 ¥×¥í¥°¥é¥à¤Î¾ì¹ç¤Ï̵»ë¤µ¤ì¤ë)¡£
111 .IP o
112 (ELF ¤Î¤ß) ¸Æ¤Ó½Ð¤·¸µ¥×¥í¥°¥é¥à¤Î¼Â¹Ô¥Õ¥¡¥¤¥ë¤Ë DT_RUNPATH ¥¿¥°¤¬´Þ¤Þ¤ì¤Æ
113 ¤¤¤ë¾ì¹ç¡¢¤½¤Î¥¿¥°¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê¡¦¥ê¥¹¥È¤ò¸¡º÷¤¹¤ë¡£
114 .IP o
115 ¥­¥ã¥Ã¥·¥å¥Õ¥¡¥¤¥ë
116 .I /etc/ld.so.cache
117 ¤ÎÃæ¤Ë
118 .I filename
119 ¤Î¥¨¥ó¥È¥ê¤¬Æþ¤Ã¤Æ¤¤¤ë¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë
120 .RB ( /etc/ld.so.cache
121 ¤Ï
122 .BR ldconfig (8)
123 ¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤Æ¤¤¤ë)¡£
124 .IP o
125 ¥Ç¥£¥ì¥¯¥È¥ê
126 .I /lib
127 ¤È
128 .I /usr/lib
129 ¤ò¤³¤Î½çÈ֤Ǹ¡º÷¤¹¤ë¡£
130 .PP
131 ¤½¤Î¥é¥¤¥Ö¥é¥ê¤¬Â¾¤Î¶¦Í­¥é¥¤¥Ö¥é¥ê¤Ë°Í¸¤·¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
132 °Í¸¤·¤Æ¤¤¤ë¥é¥¤¥Ö¥é¥ê¤âưŪ¥ê¥ó¥«¤¬Æ±¤¸¸¡º÷¥ë¡¼¥ë¤Ë´ð¤Å¤¤¤Æ
133 ¼«Æ°Åª¤Ë¥í¡¼¥É¤¹¤ë (¤½¤ì¤é¤Î¥é¥¤¥Ö¥é¥ê¤Ë¤µ¤é¤Ë°Í¸´Ø·¸¤¬¤¢¤ë¾ì¹ç¤Ê¤É¤Ï
134 ¤³¤Î½èÍý¤ÏºÆµ¢Åª¤Ë¹Ô¤ï¤ì¤ë)¡£
135 .PP
136 .I flag
137 ¤Ë¤Ï°Ê²¼¤Î 2 ¤Ä¤ÎÃͤΤ¤¤º¤ì¤«¤ò´Þ¤á¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤:
138 .TP
139 .B RTLD_LAZY
140 lazy binding (¼êÈ´¤­¤Ê¥·¥ó¥Ü¥ë¤Î·ë¤ÓÉÕ¤±) ¤¬¹Ô¤¦¡£
141 ¥·¥ó¥Ü¥ë¤Î²ò·è¤Ï¤½¤Î¥·¥ó¥Ü¥ë¤ò»²¾È¤¹¤ë¥³¡¼¥É¤¬¼Â¹Ô¤µ¤ì¤ë¤È¤­¤Ë¤Î¤ß
142 ¹Ô¤ï¤ì¤ë¡£¥·¥ó¥Ü¥ë¤¬°ìÅ٤⻲¾È¤µ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë¤Ï¡¢¤½¤Î¥·¥ó¥Ü¥ë¤Ï
143 ²ò·è¤µ¤ì¤Ê¤¤¤Þ¤Þ¤È¤Ê¤ë¡£
144 (lazy binding ¤Ï´Ø¿ô»²¾È¤Ë¤Ä¤¤¤Æ¤Î¤ß¼Â»Ü¤µ¤ì¤ë; ÊÑ¿ô¤Ø¤Î»²¾È¤Ï¾ï¤Ë
145 ¥é¥¤¥Ö¥é¥ê¤¬¥í¡¼¥É¤µ¤ì¤¿»þÅÀ¤Çľ¤Á¤Ë²ò·è¤µ¤ì¤ë¡£)
146 .TP
147 .B RTLD_NOW
148 ¤³¤ÎÃͤ¬»ØÄꤵ¤ì¤ë¤«¡¢´Ä¶­ÊÑ¿ô
149 .B LD_BIND_NOW
150 ¤Ë¶õ¤Ç¤Ê¤¤Ê¸»úÎó¤¬ÀßÄꤵ¤ì¤¿¾ì¹ç¡¢
151 ¥é¥¤¥Ö¥é¥êÃæ¤Î̤ÄêµÁ¤Î¥·¥ó¥Ü¥ë¤òÁ´¤Æ²ò·è¤·¤Æ¤«¤é
152 .BR dlopen ()
153 ¤ÏÉüµ¢¤¹¤ë¡£²ò·è¤Ç¤­¤Ê¤«¤Ã¤¿¤È¤­¤Ë¤Ï¥¨¥é¡¼¤¬ÊÖ¤µ¤ì¤ë¡£
154 .PP
155 °Ê²¼¤ÎÃͤΤ¦¤Á 0 ¸Ä°Ê¾å¤òÏÀÍýÏ (OR) ¤Î·Á¤Ç
156 .I flag
157 ¤ËÄɲ乤뤳¤È¤â¤Ç¤­¤ë:
158 .TP
159 .B RTLD_GLOBAL
160 ¤³¤Î¥é¥¤¥Ö¥é¥ê¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥·¥ó¥Ü¥ë¤¬¡¢¤³¤ì¤è¤ê¸å¤Ç¥í¡¼¥É¤µ¤ì¤ë
161 ¥é¥¤¥Ö¥é¥ê¤Î¥·¥ó¥Ü¥ë²ò·è¤ÇÍøÍѤǤ­¤ë¤è¤¦¤Ë¤Ê¤ë¡£
162 .TP
163 .B RTLD_LOCAL
164 ¤³¤Î¥Õ¥é¥°¤Ï
165 .B RTLD_GLOBAL
166 ¤ÎÈ¿ÂФΰÕÌ£¤Ç¤¢¤ê¡¢¤É¤Á¤é¤Î¥Õ¥é¥°¤â»ØÄꤵ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï
167 ¤³¤Á¤é¤¬¥Ç¥Õ¥©¥ë¥È¤È¤Ê¤ë¡£
168 ¤³¤Î¥é¥¤¥Ö¥é¥ê¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥·¥ó¥Ü¥ë¤Ï¡¢¤³¤ì¤è¤ê¸å¤Ç¥í¡¼¥É¤µ¤ì¤ë
169 ¥é¥¤¥Ö¥é¥ê¤Ç¤Î¥·¥ó¥Ü¥ë»²¾È¤ÇÍøÍѤǤ­¤Ê¤¤¡£
170 .TP
171 .BR RTLD_NODELETE " (glibc 2.2 °Ê¹ß)"
172 .BR dlclose ()
173 Ãæ¤Ë¤½¤Î¥é¥¤¥Ö¥é¥ê¤ò¥¢¥ó¥í¡¼¥É¤·¤Ê¤¤¡£
174 ¤½¤Î¤¿¤á¡¢Æ±¤¸¥é¥¤¥Ö¥é¥ê¤ò¤³¤ì°Ê¹ß¤Ë
175 .BR dlopen ()
176 ¤ÇºÆÅÙ¥í¡¼¥É¤·¤¿¾ì¹ç¤Ë¡¢¥é¥¤¥Ö¥é¥êÆâ¤ÎÀÅŪÊÑ¿ô¤ÏºÆ½é´ü²½¤µ¤ì¤Ê¤¤¡£
177 ¤³¤Î¥Õ¥é¥°¤Ï POSIX.1-2001 ¤Ç¤Ïµ¬Äꤵ¤ì¤Æ¤¤¤Ê¤¤¡£
178 .\" (¤·¤«¤· Solaris ¤Ë¸ºß¤¹¤ë)
179 .TP
180 .BR RTLD_NOLOAD " (glibc 2.2 °Ê¹ß)"
181 ¤½¤Î¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤·¤Ê¤¤¡£
182 ¤³¤Î¥Õ¥é¥°¤Ï¤½¤Î¥é¥¤¥Ö¥é¥ê¤¬¤¹¤Ç¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤«¤ò¸¡ºº¤¹¤ë¤Î¤Ë
183 ÍøÍѤǤ­¤ë
184 .RB ( dlopen ()
185 ¤Ï¡¢¥é¥¤¥Ö¥é¥ê¤¬ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð NULL ¤òÊÖ¤·¡¢
186 ¤¹¤Ç¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ì¤Ð¤½¤Î¥é¥¤¥Ö¥é¥ê¤Î¥Ï¥ó¥É¥ë¤òÊÖ¤¹)¡£
187 ¤Þ¤¿¡¢¤¹¤Ç¤Ë¥í¡¼¥É¤µ¤ì¤Æ¤¤¤ë¥é¥¤¥Ö¥é¥ê¤Î¥Õ¥é¥°¤ò¾º³Ê¤µ¤»¤ë¤Î¤Ë¤â
188 ÍøÍѤǤ­¤ë¡£Î㤨¤Ð¡¢²áµî¤Ë
189 .B RTLD_LOCAL
190 ¤Ç¥í¡¼¥É¤·¤¿¥é¥¤¥Ö¥é¥ê¤ò
191 .BR RTLD_NOLOAD\ |\ RTLD_GLOBAL
192 ¤ÇºÆ¥ª¡¼¥×¥ó¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
193 ¤³¤Î¥Õ¥é¥°¤Ï POSIX.1-2001 ¤Ç¤Ïµ¬Äꤵ¤ì¤Æ¤¤¤Ê¤¤¡£
194 .\" (¤·¤«¤· Solaris ¤Ë¸ºß¤¹¤ë)
195 .TP
196 .BR RTLD_DEEPBIND " (glibc 2.3.4 °Ê¹ß)"
197 .\" Inimitably described by UD in
198 .\" http://sources.redhat.com/ml/libc-hacker/2004-09/msg00083.html.
199 ¤³¤Î¥é¥¤¥Ö¥é¥êÆâ¤Î¥·¥ó¥Ü¥ë¤Î»²¾ÈÎΰè¤ò¥°¥í¡¼¥Ð¥ëÎΰè¤è¤ê¤âÁ°¤ËÇÛÃÖ¤¹¤ë¡£
200 ¤Ä¤Þ¤ê¡¢Æ⢷¿¤Î¥é¥¤¥Ö¥é¥ê¤Ç¤Ï¡¢¤¹¤Ç¤Ë¥í¡¼¥É¤µ¤ì¤¿¥é¥¤¥Ö¥é¥ê¤Ë´Þ¤Þ¤ì¤ë
201 Ʊ¤¸Ì¾Á°¤Î¥°¥í¡¼¥Ð¥ë¤Ê¥·¥ó¥Ü¥ë¤è¤ê¤â¼«¥é¥¤¥Ö¥é¥êÆâ¤Î¥·¥ó¥Ü¥ë¤¬Í¥À褷¤Æ
202 »È¤ï¤ì¤ë¡£
203 ¤³¤Î¥Õ¥é¥°¤Ï POSIX.1-2001 ¤Ç¤Ïµ¬Äꤵ¤ì¤Æ¤¤¤Ê¤¤¡£
204 .PP
205 .I filename
206 ¤¬ NULL ¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¾ì¹ç¤Ï¡¢
207 ÊÖ¤µ¤ì¤ë¥Ï¥ó¥É¥ë¤Ï¥á¥¤¥ó¡¦¥×¥í¥°¥é¥à¤Î¤â¤Î¤Ë¤Ê¤ë¡£
208 ¤³¤Î¥Ï¥ó¥É¥ë¤¬
209 .BR dlsym ()
210 ¤ËÅϤµ¤ì¤ë¤È¡¢¥·¥ó¥Ü¥ë¤Î¸¡º÷¤Ï¡¢¥á¥¤¥ó¡¦¥×¥í¥°¥é¥àÆâ¡¢
211 ¥×¥í¥°¥é¥à¤Îµ¯Æ°»þ¤Ë¥í¡¼¥É¤µ¤ì¤ëÁ´¤Æ¤Î¶¦Í­¥é¥¤¥Ö¥é¥ê¡¢
212 .BR dlopen ()
213 ¤Ë¤è¤Ã¤Æ
214 .B RTLD_GLOBAL
215 ¥Õ¥é¥°ÉÕ¤­¤Ç¥í¡¼¥É¤µ¤ì¤¿Á´¤Æ¤Î¶¦Í­¥é¥¤¥Ö¥é¥ê¡¢¤Î½ç½ø¤Ç¹Ô¤ï¤ì¤ë¡£
216 .PP
217 ¥ª¡¼¥×¥ó¤µ¤ì¤¿¥é¥¤¥Ö¥é¥êÃæ¤Ç¤Î³°Éô»²¾È¤Ï¡¢
218 ¤½¤Î¥é¥¤¥Ö¥é¥ê¤Î°Í¸¥ê¥¹¥È¤Ë¤¢¤ë¥é¥¤¥Ö¥é¥ê¤«¡¢
219 .B RTLD_GLOBAL
220 ¥Õ¥é¥°ÉÕ¤­¤Ç´û¤Ë¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤ë¥é¥¤¥Ö¥é¥ê¤ò»È¤Ã¤Æ²ò·è¤µ¤ì¤ë¡£
221 ¼Â¹Ô¥Õ¥¡¥¤¥ë¤¬ "\-rdynamic" ¥Õ¥é¥° ("\-\-export\-dynamic" ¤âƱµÁ)
222 ÉÕ¤­¤Ç¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¼Â¹Ô¥Õ¥¡¥¤¥ëÃæ¤Î¥°¥í¡¼¥Ð¥ë¥·¥ó¥Ü¥ë¤â¡¢
223 ưŪ¤Ë¥í¡¼¥É¤µ¤ì¤ë¥é¥¤¥Ö¥é¥êÆâ¤Î»²¾È²ò·è¤ËÍѤ¤¤é¤ì¤ë¡£
224 .PP
225 Ʊ¤¸¥é¥¤¥Ö¥é¥ê¤¬
226 .BR dlopen ()
227 ¤Ë¤è¤Ã¤ÆºÆÅÙ¥í¡¼¥É¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¡¢Æ±¤¸¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë¤¬ÊÖ¤µ¤ì¤ë¡£
228 dl ¥é¥¤¥Ö¥é¥ê¤Ï¥é¥¤¥Ö¥é¥ê¥Ï¥ó¥É¥ë¤Î¥ê¥ó¥¯¿ô¤ò´ÉÍý¤·¤Æ¤¤¤ë¡£
229 ¤·¤¿¤¬¤Ã¤ÆưŪ¥é¥¤¥Ö¥é¥ê¤Ï
230 .BR dlclose ()
231 ¤¬
232 .BR dlopen ()
233 ¤ÈƱ¤¸²ó¿ô¤À¤±¸Æ¤Ó½Ð¤µ¤ì¤Ê¤¤¸Â¤ê¥¢¥ó¥í¡¼¥É¤µ¤ì¤Ê¤¤¡£
234 .BR _init ()
235 ¥ë¡¼¥Á¥ó¤Ï°ìÅÙ¤À¤±¸Æ¤Ó½Ð¤µ¤ì¤ë
236 .RB ( _init ()
237 ¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Î¤ß)¡£
238 .B RTLD_NOW
239 ¤¬»ØÄꤵ¤ì¤Æ
240 .BR dlopen ()
241 ¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿¾ì¹ç¡¢
242 .B RTLD_LAZY
243 ¤Ç°ÊÁ°¤Ë¥í¡¼¥É¤µ¤ì¤¿¥é¥¤¥Ö¥é¥ê¤Î¥·¥ó¥Ü¥ë²ò·è¤¬¼Â¹Ô¤µ¤ì¤ë¤³¤È¤¬¤¢¤ë¡£
244 .PP
245 .BR dlopen ()
246 ¤Ï¡¢²¿¤é¤«¤ÎÍýͳ¤Ç¼ºÇÔ¤¹¤ë¤È NULL ¤òÊÖ¤¹¡£
247
248 .SS "dlsym()"
249 ´Ø¿ô
250 .BR dlsym ()
251 ¤Ï¡¢
252 .BR dlopen ()
253 ¤¬ÊÖ¤·¤¿Æ°Åª¥é¥¤¥Ö¥é¥ê¤Î¡Ö¥Ï¥ó¥É¥ë¡×¤È¡¢
254 NULL ½ªÃ¼¤µ¤ì¤¿¥·¥ó¥Ü¥ë̾¤Îʸ»úÎó¤ò°ú¤­¿ô¤Ë¼è¤ê¡¢
255 ¤½¤Î¥·¥ó¥Ü¥ë¤¬¥í¡¼¥É¤µ¤ì¤¿¥á¥â¥ê¤Î¥¢¥É¥ì¥¹¤òÊÖ¤¹¡£
256 ¥·¥ó¥Ü¥ë¤¬¡¢»ØÄꤵ¤ì¤¿¥é¥¤¥Ö¥é¥ê¤È¡¢»ØÄꤵ¤ì¤¿¥é¥¤¥Ö¥é¥ê¤¬¥í¡¼¥É¤µ¤ì¤ëºÝ¤Ë
257 .BR dlopen ()
258 ¤¬¼«Æ°Åª¤Ë¥í¡¼¥É¤·¤Æ¥é¥¤¥Ö¥é¥ê¤Î¤¤¤º¤ì¤Ë¤â¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢
259 .BR dlsym ()
260 ¤Ï NULL ¤òÊÖ¤¹
261 .RB ( dlsym ()
262 ¤Ë¤è¤ë¸¡º÷¤Ï¡¢¤³¤ì¤é¤Î¥é¥¤¥Ö¥é¥ê¤Î°Í¸´Ø·¸¤Î¥Ä¥ê¡¼¤òÀèƬ¤«¤é
263 é¤Ã¤Æ¹Ô¤ï¤ì¤ë)¡£
264 ¼ÂºÝ¤Ë¤Ï¥·¥ó¥Ü¥ë¤ÎÃͼ«ÂΤ¬ NULL ¤Ë¤Ê¤ë¤³¤È¤â¤¢¤ë (¤½¤Î¤¿¤á¡¢
265 .BR dlsym ()
266 ¤ÎÊÖ¤êÃͤ¬ NULL ¤Ç¤¢¤Ã¤¿¤È¤·¤Æ¤âɬ¤º¤·¤â¥¨¥é¡¼¤È¤¤¤¦Ìõ¤Ç¤Ï¤Ê¤¤)¡£
267 ¥¨¥é¡¼¤«¤É¤¦¤«¤ò³Îǧ¤¹¤ëÀµ¤·¤¤ÊýË¡¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¢¤ë:
268 .BR dlerror ()
269 ¤ò¸Æ¤Ó½Ð¤·¤Æ°ÊÁ°¤Î¥¨¥é¡¼¾õÂÖ¤ò¥¯¥ê¥¢¤·¤Æ¤«¤é¡¢
270 .BR dlsym ()
271 ¤ò¸Æ¤Ó½Ð¤¹¡£¤½¤Î¸å¤Ç¤â¤¦°ìÅÙ
272 .BR dlerror ()
273 ¤ò¸Æ¤Ó½Ð¤·¤Æ¡¢
274 .BR dlerror ()
275 ¤ÎÊÖ¤êÃͤòÊÑ¿ô¤ËÊݸ¤·¡¢Êݸ¤·¤¿Ãͤ¬ NULL ¤Ç¤¢¤ë¤«È½Äꤹ¤ë¡£
276 .PP
277 .B RTLD_DEFAULT
278 ¤È
279 .B RTLD_NEXT
280 ¤È¤¤¤¦Æó¤Ä¤ÎÆÃÊ̤ʵ¼»÷¥Ï¥ó¥É¥ë¤¬¤¢¤ë¡£
281 .B RTLD_DEFAULT
282 ¤Ï¡¢¥Ç¥Õ¥©¥ë¥È¤Î¥é¥¤¥Ö¥é¥ê¸¡º÷½ç½ø¤Ë¤·¤¿¤¬¤Ã¤Æ¡¢
283 ¸¡º÷ÂоݤΥ·¥ó¥Ü¥ë¤¬ºÇ½é¤Ë¸½¤ì¤ë¤È¤³¤í¤òõ¤¹¡£
284 .B RTLD_NEXT
285 ¤Ï¡¢¥é¥¤¥Ö¥é¥ê¸¡º÷½ç½ø¤ÎÃæ¤Ç¸½ºß¤Î¥é¥¤¥Ö¥é¥ê°Ê¹ß¤ÇºÇ½é¤Ë
286 ´Ø¿ô¤¬¸½¤ì¤ë¤È¤³¤í¤òõ¤¹¡£¤³¤Îµ¡Ç½¤ò»È¤¦¤³¤È¤Ç¡¢Ê̤ζ¦Í­¥é¥¤¥Ö¥é¥ê¤Î
287 ´Ø¿ô¤Ø¤Î¥é¥Ã¥Ñ¡¼¤òÄ󶡤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
288 .SS "dlclose()"
289 ´Ø¿ô
290 .BR dlclose ()
291 ¤ÏưŪ¥é¥¤¥Ö¥é¥ê¤Î¥Ï¥ó¥É¥ë
292 .I handle
293 ¤Î»²¾È¥«¥¦¥ó¥È¤ò 1 ¸º¤é¤¹¡£»²¾È¥«¥¦¥ó¥È¤¬ 0 ¤Ë¤Ê¤ê¡¢¥í¡¼¥É¤µ¤ì¤Æ¤¤¤ë
294 ¾¤Î¥é¥¤¥Ö¥é¥ê¤«¤é¤½¤Î¥é¥¤¥Ö¥é¥êÆâ¤Î¥·¥ó¥Ü¥ë¤¬»È¤ï¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢
295 ¤½¤ÎưŪ¥é¥¤¥Ö¥é¥ê¤ò¥¢¥ó¥í¡¼¥É¤¹¤ë¡£
296 .LP
297 ´Ø¿ô
298 .BR dlclose ()
299 ¤Ï¡¢À®¸ù¤·¤¿¾ì¹ç¤Ï 0 ¤òÊÖ¤·¡¢¥¨¥é¡¼¤Î¾ì¹ç 0 °Ê³°¤òÊÖ¤¹¡£
300 .SS "Çѻߤµ¤ì¤¿¥·¥ó¥Ü¥ë _init() ¤È _fini()"
301 ¥ê¥ó¥«¤Ï
302 .B _init
303 ¤È
304 .B _fini
305 ¤òÆÃÊ̤ʥ·¥ó¥Ü¥ë¤È²ò¼á¤¹¤ë¡£
306 ¤¢¤ëưŪ¥é¥¤¥Ö¥é¥ê¤Ç
307 .BR _init ()
308 ¤È¤¤¤¦Ì¾Á°¤Î¥ë¡¼¥Á¥ó¤¬¥¨¥¯¥¹¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢
309 ¤½¤Î¥³¡¼¥É¤Ï¡¢¥é¥¤¥Ö¥é¥ê¤Î¥í¡¼¥É¸å¡¢¤«¤Ä
310 .BR dlopen ()
311 ¤¬Éüµ¢¤¹¤ëÁ°¤Ë¼Â¹Ô¤µ¤ì¤ë¡£
312 ¤½¤ÎưŪ¥é¥¤¥Ö¥é¥ê¤Ç
313 .BR _fini ()
314 ¤È¤¤¤¦Ì¾Á°¤Î¥ë¡¼¥Á¥ó¤¬¥¨¥¯¥¹¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢
315 ¥é¥¤¥Ö¥é¥ê¤¬¥¢¥ó¥í¡¼¥É¤µ¤ì¤ëľÁ°¤Ë¤½¤Î¥ë¡¼¥Á¥ó¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
316 ¥·¥¹¥Æ¥à¤Îµ¯Æ°¥Õ¥¡¥¤¥ë¤ËÂФ¹¤ë¥ê¥ó¥¯¤òÈò¤±¤ëɬÍפ¬¤¢¤ë¾ì¹ç¡¢
317 .BR gcc (1)
318 ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ë
319 .I \-nostartfiles
320 ¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ì¤Ð¤è¤¤¡£
321 .LP
322 ¤³¤Î¥ë¡¼¥Á¥ó¤ä¡¢gcc ¤Î¥ª¥×¥·¥ç¥ó
323 .B \-nostartfiles
324 ¤ä
325 .B \-nostdlib
326 ¤Ï»ÈÍѤ·¤Ê¤¤¤³¤È¤ò¿ä¾©¤¹¤ë¡£
327 ¤³¤ì¤é¤ò»È¤¦¤È¡¢Ë¾¤Þ¤·¤¯¤Ê¤¤Æ°ºî¤ò¤¹¤ë¤³¤È¤¬¤¢¤ë¡£
328 ¤Ê¤¼¤Ê¤é¡¢(ÆÃÊ̤ÊÁ¼ÃÖ¤¬¹Ô¤ï¤ì¤Ê¤¤¸Â¤ê) ¤³¤ì¤é¤Î constructor/destructor
329 ¥ë¡¼¥Á¥ó¤Ï¼Â¹Ô¤µ¤ì¤Ê¤¤¤«¤é¤Ç¤¢¤ë¡£
330 .\" void _init(void) __attribute__((constructor));
331 .\" void _fini(void) __attribute__((destructor));
332 .LP
333 Âå¤ï¤ê¤Ë¡¢¥é¥¤¥Ö¥é¥ê¤Ï
334 .B __attribute__((constructor))
335 ¤ä
336 .B __attribute__((destructor))
337 ¤Î´Ø¿ô°À­¤ò»È¤Ã¤ÆɬÍפʥ롼¥Á¥ó¤ò¥¨¥¯¥¹¥Ý¡¼¥È¤¹¤ë¤Î¤¬¤è¤¤¡£
338 ¤³¤ì¤é¤Ë¤Ä¤¤¤Æ¤Ï gcc ¤Î info ¥Ú¡¼¥¸¤ò»²¾È¤Î¤³¤È¡£
339 constructor ¥ë¡¼¥Á¥ó¤Ï
340 .BR dlopen ()
341 ¤¬Éüµ¢¤¹¤ëÁ°¤Ë¼Â¹Ô¤µ¤ì¡¢
342 destructor ¥ë¡¼¥Á¥ó¤Ï
343 .BR dlclose ()
344 ¤¬Éüµ¢¤¹¤ëÁ°¤Ë¼Â¹Ô¤µ¤ì¤ë¡£
345 .SS GNU ¤Ç¤Î³ÈÄ¥: dladdr() ¤È dlvsym()
346 glibc ¤Ç¤Ï POSIX ¤Ë¤Ïµ­ºÜ¤µ¤ì¤Æ¤¤¤Ê¤¤´Ø¿ô¤¬ 2¤ÄÄɲ䵤ì¤Æ¤¤¤ë¡£
347 ¥×¥í¥È¥¿¥¤¥×¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¢¤ë¡£
348 .sp
349 .nf
350 .B #define _GNU_SOURCE
351 .B #include <dlfcn.h>
352 .sp
353 .BI "int dladdr(void *" addr ", Dl_info *" info );
354 .sp
355 .BI "void *dlvsym(void *" handle ", char *" symbol ", char *" version );
356 .fi
357 .PP
358 ´Ø¿ô
359 .BR dladdr ()
360 ¤Ï¡¢´Ø¿ô¤Î¥Ý¥¤¥ó¥¿¤ò°ú¤­¿ô¤Ë¤È¤ê¡¢´Ø¿ô¤Î̾Á°¤È´Ø¿ô¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë
361 ¥Õ¥¡¥¤¥ë¤Î²ò·è¤ò»î¤ß¤ë¡£¾ðÊó¤Ï
362 .I Dl_info
363 ¹½Â¤ÂΤ˳ÊǼ¤µ¤ì¤ë¡£
364 .sp
365 .in +4n
366 .nf
367 typedef struct {
368     const char *dli_fname;  /* Pathname of shared object that
369                                contains address */
370     void       *dli_fbase;  /* Address at which shared object
371                                is loaded */
372     const char *dli_sname;  /* Name of nearest symbol with address
373                                lower than \fIaddr\fP */
374     void       *dli_saddr;  /* Exact address of symbol named
375                                in \fIdli_sname\fP */
376 } Dl_info;
377 .fi
378 .in
379 .PP
380 .I addr
381 ¤Ë¥Þ¥Ã¥Á¤¹¤ë¥·¥ó¥Ü¥ë¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¡¢
382 .I dli_sname
383 ¤È
384 .I dli_saddr
385 ¤Ï NULL ¤Ë¥»¥Ã¥È¤µ¤ì¤ë¡£
386 .PP
387 .BR dladdr ()
388 ¤Ï¡¢¥¨¥é¡¼»þ¤Ë¤Ï 0 ¤òÊÖ¤·¡¢À®¸ù¤·¤¿¾ì¹ç¤Ï 0 °Ê³°¤òÊÖ¤¹¡£
389 .PP
390 ´Ø¿ô
391 .BR dlvsym ()
392 ¤Ï
393 .BR dlsym ()
394 ¤ÈƱ¤¸Æ°ºî¤ò¤¹¤ë¤¬¡¢¥Ð¡¼¥¸¥ç¥ó¤Îʸ»úÎó¤òÅϤ¹°ú¤­¿ô¤¬
395 Äɲ䵤ì¤Æ¤¤¤ëÅÀ¤¬°Û¤Ê¤ë
396 .RB ( dlvsym ()
397 ¤Ï¥Ð¡¼¥¸¥ç¥ó 2.1 °Ê¹ß¤Î glibc ¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë)¡£
398 .SH ½àµò
399 POSIX.1-2003 ¤Ë¤Ï
400 .BR dlclose (),
401 .BR dlerror (),
402 .BR dlopen (),
403 .BR dlsym ().
404 ¤Îµ­ºÜ¤¬¤¢¤ë¡£
405 .SH Ãí°Õ
406 ¥·¥ó¥Ü¥ë
407 .B RTLD_DEFAULT
408 ¤È
409 .B RTLD_NEXT
410 ¤Ï
411 .I <dlfcn.h>
412 ¤ÇÄêµÁ¤µ¤ì¤Æ¤ª¤ê¡¢
413 .I <dlfcn.h>
414 ¤Î¥¤¥ó¥¯¥ë¡¼¥ÉÁ°¤Ë
415 .B _GNU_SOURCE
416 ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Î¤ßÍ­¸ú¤È¤Ê¤ë¡£
417 .\" .LP
418 .\" .BR dlerror ()
419 .\" ¤¬ÊÖ¤¹Ê¸»úÎó¤ÏÊѹ¹¤¹¤Ù¤­¤Ç¤Ï¤Ê¤¤¡£¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¤Ï¡¢
420 .\" °Ê²¼¤Î¤è¤¦¤Ê¥×¥í¥È¥¿¥¤¥×¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£
421 .\" .sp
422 .\" .in +5
423 .\" .B "const char *dlerror(void);"
424 .\" .in
425
426 glibc 2.2.3 °Ê¹ß¤Ç¤Ï¡¢
427 .BR atexit (3)
428 ¤ò»È¤Ã¤Æ¡¢¥é¥¤¥Ö¥é¥ê¤¬¥¢¥ó¥í¡¼¥É¤µ¤ì¤ëºÝ¤Ë¼«Æ°Åª¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë
429 ½ªÎ»¥Ï¥ó¥É¥é (exit handler) ¤òÅÐÏ¿¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
430 .SS Îò»Ë
431 dlopen ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Îɸ½à¤Ï SunOS ¤ò¤â¤È¤Ë¤·¤Æ¤¤¤ë¡£
432 SunOS ¤Ë¤Ï
433 .BR dladdr ()
434 ¤â¤¢¤Ã¤¿¤¬¡¢
435 .BR dlvsym ()
436 ¤Ï¤Ê¤«¤Ã¤¿¡£
437 .SH ¥Ð¥°
438 »þ¤È¤·¤Æ¡¢
439 .BR dladdr ()
440 ¤ËÅϤ·¤¿´Ø¿ô¥Ý¥¤¥ó¥¿¤Ï¶Ã¤¯¤è¤¦¤ÊÃͤˤʤ뤳¤È¤¬¤¢¤ë¡£
441 ¤¤¤¯¤Ä¤«¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã (Æäˠi386 ¤È x86_64) ¤Ç¤Ï¡¢
442 °ú¤­¿ô¤È¤·¤Æ»ÈÍѤ·¤¿´Ø¿ô¤¬Æ°Åª¥ê¥ó¥¯¥é¥¤¥Ö¥é¥ê¤ÇÄêµÁ¤µ¤ì¤ë¤â¤Î¤Ç
443 ¤¢¤Ã¤¿¤È¤·¤Æ¤â¡¢
444 .I dli_fname
445 ¤È
446 .I dli_fbase
447 ¤¬
448 .BR dladdr ()
449 ¤ò¸Æ¤Ó½Ð¤·¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ò»²¾È¤·¤¿¾õÂ֤ǽª¤ï¤Ã¤Æ¤¤¤ë¤³¤È¤¬¤¢¤ë¡£
450 .PP
451 ÌäÂê¤Ï¡¢´Ø¿ô¥Ý¥¤¥ó¥¿¤Î²ò·è¤Ïº£¤Ê¤ª¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¹Ô¤ï¤ì¤ë¤¬¡¢
452 ¤½¤Î¥Ý¥¤¥ó¥¿¤Ï¸µ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î
453 .I plt
454 (Procedure Linkage Table) ¥»¥¯¥·¥ç¥ó¤ò»Ø¤·¤Æ¤¤¤ë¤À¤±¤À¤È¤¤¤¦ÅÀ¤Ë¤¢¤ë
455 (¥ª¥Ö¥¸¥§¥¯¥È¼«ÂΤϡ¢¥À¥¤¥Ê¥ß¥Ã¥¯¥ê¥ó¥«¤Ë¤è¤Ã¤Æ¥·¥ó¥Ü¥ë¤Î²ò·è¤¬¹Ô¤ï¤ì¤¿¸å¤Ë¡¢
456 ´Ø¿ô¤Î¸Æ¤Ó½Ð¤·¤ò¹Ô¤¦)¡£
457 ¤³¤ì¤ËÂн褹¤ëÊýË¡¤È¤·¤Æ¤Ï¡¢
458 ¥³¡¼¥É¤ò position-independent ¤Ç¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È¤¤¤¦ÊýË¡¤¬¤¢¤ë¡£
459 ¤½¤¦¤¹¤ë¤È¡¢¥³¥ó¥Ñ¥¤¥é¤Ï¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥Ý¥¤¥ó¥¿¤òÍÑ°Õ¤¹¤ë¤³¤È¤¬¤Ç¤­¤º¡¢
460 º£Æü¤Î
461 .BR gcc (1)
462 ¤Ç¤Ï¡¢¼Â¹Ô»þ¤Ë
463 .BR dladdr ()
464 ¤Ë´Ø¿ô¥Ý¥¤¥ó¥¿¤òÅϤ¹Á°¤Ë¡¢
465 .I got
466 (Global Offset Table) ¤«¤éºÇ½ªÅª¤Ê¥·¥ó¥Ü¥ë¤Î¥¢¥É¥ì¥¹¤ò¥í¡¼¥É¤¹¤ë¤À¤±¤Î
467 ¥³¡¼¥É¤¬À¸À®¤µ¤ì¤ë¡£
468 .SH Îã
469 math ¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤·¡¢2.0 ¤Î;¸¹¤òɽ¼¨¤¹¤ë
470 .nf
471
472 #include <stdio.h>
473 #include <stdlib.h>
474 #include <dlfcn.h>
475
476 int
477 main(int argc, char **argv)
478 {
479     void *handle;
480     double (*cosine)(double);
481     char *error;
482
483     handle = dlopen("libm.so", RTLD_LAZY);
484     if (!handle) {
485         fprintf(stderr, "%s\en", dlerror());
486         exit(EXIT_FAILURE);
487     }
488
489     dlerror();    /* Clear any existing error */
490
491     /* Writing: cosine = (double (*)(double)) dlsym(handle, "cos");
492        would seem more natural, but the C99 standard leaves
493        casting from "void *" to a function pointer undefined.
494        The assignment used below is the POSIX.1\-2003 (Technical
495        Corrigendum 1) workaround; see the Rationale for the
496        POSIX specification of dlsym(). */
497
498     *(void **) (&cosine) = dlsym(handle, "cos");
499 .\" But in fact "gcc -O2 -Wall" will complain about the preceding cast.
500
501     if ((error = dlerror()) != NULL)  {
502         fprintf(stderr, "%s\en", error);
503         exit(EXIT_FAILURE);
504     }
505
506     printf("%f\en", (*cosine)(2.0));
507     dlclose(handle);
508     exit(EXIT_SUCCESS);
509 }
510 .fi
511 .PP
512 ¤³¤Î¥×¥í¥°¥é¥à¤ò "foo.c" ¤Ë½ñ¤¤¤¿¤È¤¹¤ë¤È¡¢°Ê²¼¤Î¥³¥Þ¥ó¥É¤Ç¥×¥í¥°¥é¥à¤ò
513 ¥Ó¥ë¥É¤Ç¤­¤ë¡£
514 .in +4n
515 .LP
516     gcc \-rdynamic \-o foo foo.c \-ldl
517 .in
518 .PP
519 .BR _init ()
520 ¤È
521 .BR _fini ()
522 ¤ò¥¨¥¯¥¹¥Ý¡¼¥È¤¹¤ë¥é¥¤¥Ö¥é¥ê¤Î¾ì¹ç¤Ï
523 °Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤¹¤ëɬÍפ¬¤¢¤ë¡£
524 Îã¤È¤·¤Æ \fIbar.c\fP ¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¾ì¹ç:
525 .in +4n
526 .LP
527     gcc \-shared \-nostartfiles \-o bar bar.c
528 .in
529 .SH ´ØÏ¢¹àÌÜ
530 .BR ld (1),
531 .BR ldd (1),
532 .BR dl_iterate_phdr (3),
533 .BR feature_test_macros (7),
534 .BR rtld-audit (7),
535 .BR ld.so (8),
536 .BR ldconfig (8),
537 ld.so info pages, gcc info pages, ld info pages