<HTML ><HEAD ><TITLE >$B$5$i$KB?$/$NNc(B</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK REL="HOME" TITLE="Program Library HOWTO" HREF="index.html"><LINK REL="PREVIOUS" TITLE="$B;(O?(B" HREF="miscellaneous.html"><LINK REL="NEXT" TITLE="$B$=$NB>$N>pJs8;(B" HREF="info-sources.html"></HEAD ><BODY CLASS="SECT1" BGCOLOR="#FFFFFF" TEXT="#000000" ><DIV CLASS="NAVHEADER" ><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Program Library HOWTO</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="miscellaneous.html" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="info-sources.html" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="SECT1" ><H1 CLASS="SECT1" ><A NAME="MORE-EXAMPLES" >6. $B$5$i$KB?$/$NNc(B</A ></H1 ><P >$B2<5-$K!"A4;0$D$N%"%W%m!<%A(B ($B@EE*!"6&M-!"$*$h$SF0E*$K%m!<%I$5$l$k%i%$%V%i%j(B) $B$NNc$r$5$i$K5s$2$^$9!#%U%!%$%k(B libhello.c $B$OJ?K^$J%i%$%V%i%j$G!"(B $B%X%C%@%U%!%$%k$H$7$F(B libhello.h $B$r;}$A$^$9!#%U%!%$%k(B demo_use.c $B$O!"(B $B$=$N%i%$%V%i%j$NJ?K^$J8F=P$7$G$9!#(B $B@EE*%i%$%V%i%j$dF0E*%i%$%V%i%j$H$7$FEv3:%i%$%V%i%j$r;H$&J}K!$r<($9$?$a!"(B $B%3%a%s%HIU$-$N%9%/%j%W%H(B (script_static $B$H(B script_dynamic) $B$,$"$H$KB3$-$^$9!#(B $B$5$i$K(B demo_dynamic.c $B$H(B script_dynamic $B$,$"$H$KB3$-$^$9!#(B $B$3$l$i$O6&M-%i%$%V%i%j$rF0E*$K%m!<%I$5$l$k%i%$%V%i%j$H$7$F;H$&J}K!$r<($7$^$9!#(B</P ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="AEN238" >6.1. $B%U%!%$%k(B libhello.c</A ></H2 ><P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >/* libhello.c - $B%i%$%V%i%j;HMQ$N<BNc(B */ #include <stdio.h> void hello(void) { printf("Hello, library world.\n"); } </PRE ></FONT ></TD ></TR ></TABLE ></P ></DIV ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="AEN242" >6.2. $B%U%!%$%k(B libhello.h</A ></H2 ><P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >/* libhello.h - $B%i%$%V%i%j;HMQ$N<BNc(B */ void hello(void); </PRE ></FONT ></TD ></TR ></TABLE ></P ></DIV ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="AEN246" >6.3. $B%U%!%$%k(B demo_use.c</A ></H2 ><P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >/* demo_use.c -- "hello" $B%k!<%A%s$rD>@\;HMQ$9$k<BNc(B */ #include "libhello.h" int main(void) { hello(); return 0; }</PRE ></FONT ></TD ></TR ></TABLE ></P ></DIV ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="AEN250" >6.4. $B%U%!%$%k(B script_static</A ></H2 ><P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >#!/bin/sh # $B@EE*%i%$%V%i%j$N<BNc(B # $B@EE*%i%$%V%i%j$N%*%V%8%'%/%H(B libhello-static.o $B$r:n@.$7$^$9!#(B # $B@EE*%i%$%V%i%j$HF0E*%i%$%V%i%j$NNc$rL@3N$K6hJL$9$k$?$a!"(B # libhello-static $B$H$$$&L>A0$r;HMQ$7$F$$$^$9!#$7$+$7!"$"$J$?$N(B # $B%*%V%8%'%/%H%U%!%$%k$d@EE*%i%$%V%i%j$NL>A0$K(B "-static" $B$r;H$&(B # $BI,MW$O$"$j$^$;$s!#(B gcc -Wall -g -c -o libhello-static.o libhello.c # $B@EE*%i%$%V%i%j$r:n@.$7$^$9!#(B ar rcs libhello-static.a libhello-static.o # $B$3$3$G!"(Blibhello-static.a $B$r;H$&$?$a$K$=$l$r$I$3$+B>$N>l=j$X(B # $BC1$K%3%T!<$9$k$3$H$b$G$-$^$9!#%G%b$,L\E*$J$N$G!"%i%$%V%i%j$O(B # $B%+%l%s%H%G%#%l%/%H%jFb$K$H$I$a$F$*$-$^$9!#(B # demo_use $B%W%m%0%i%`$r%3%s%Q%$%k$7$^$9!#(B gcc -Wall -g -c demo_use.c -o demo_use.o # demo_use $B%W%m%0%i%`$r:n@.$7$^$9!#(B-L. $B$K$h$j!"%W%m%0%i%`:n@.Cf$K(B # "." $B$,8!:w$5$l$k$3$H$K$J$j$^$9!#$3$N%3%^%s%I$O!"(Blibhello-static.a # $BFb$N4X78$9$k%*%V%8%'%/%H$r(B demo_use_static $B$KAH$_9~$`$H$$$&$3$H(B # $B$KCm0U$7$F$/$@$5$$!#(B gcc -g -o demo_use_static demo_use.o -L. -lhello-static # $B%W%m%0%i%`$r<B9T$7$^$9!#(B ./demo_use_static</PRE ></FONT ></TD ></TR ></TABLE ></P ></DIV ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="AEN254" >6.5. $B%U%!%$%k(B script_shared</A ></H2 ><P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >#!/bin/sh # $B6&M-%i%$%V%i%j$N<BNc(B # $B6&M-%i%$%V%i%j$N%*%V%8%'%/%H%U%!%$%k(B libhello.o $B$r:n@.$7$^$9!#(B gcc -fPIC -Wall -g -c libhello.c # $B6&M-%i%$%V%i%j$r:n@.$7$^$9!#(B # libhello $B$O(B C $B%i%$%V%i%j$K0MB8$7$F$$$k$N$G!"(BC $B%i%$%V%i%j$H(B # $B%j%s%/$5$;$k$?$a$K(B -lc $B%*%W%7%g%s$r;H$$$^$9!#(B gcc -g -shared -Wl,-soname,libhello.so.0 \ -o libhello.so.0.0 libhello.o -lc # $B$3$3$G!"(Blibhello.so.0.0 $B$r$I$3$+$N%G%#%l%/%H%j!"(B/usr/local/lib # $B$J$I!"$KC1$K%3%T!<$G$-$^$9!#(B # $B%7%s%\%j%C%/%j%s%/$r=$@5$9$k$?$a!"(Bldconfig $B$r8F$S=P$9I,MW$,$"$j$^$9!#(B # soname $B$r@_Dj$7$^$9!#C1$K!"(B # # ln -sf libhello.so.0.0 libhello.so.0 # # $B$r<B9T$9$k$@$1$G$b$h$$$G$9$,!"(Bldconfig $B$K$d$C$F$b$i$$$^$7$g$&!#(B /sbin/ldconfig -n . # linker name $B$r@_Dj$7$^$9!#(B # $B$h$j@vN}$5$l$?@_Dj$r$*$3$J$&$J$i!"4{$K(B linker name $B$,B8:_$9$k$+$r(B # $B3NG'$7!"$b$7B8:_$9$l$P!"$=$l$r;D$7$F$*$/$Y$-$+H]$+$rD4$Y$^$9!#(B ln -sf libhello.so.0 libhello.so # demo_use $B%W%m%0%i%`$r%3%s%Q%$%k$7$^$9!#(B gcc -Wall -g -c demo_use.c -o demo_use.o # demo_use $B%W%m%0%i%`$r:n@.$7$^$9!#(B-L. $B$K$h$j!"%W%m%0%i%`:n@.Cf$K(B # "." $B$,8!:w$5$l$k$3$H$K$J$j$^$9!#$3$l$O!"%W%m%0%i%`<B9T;~$K(B "." # $B$,8!:w$5$l$k$3$H$r0UL#(B '$B$7$J$$(B' $B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B gcc -g -o demo_use demo_use.o -L. -lhello # $B%W%m%0%i%`$r<B9T$7$^$9!#(BLD_LIBRARY_PATH $B$r;H$C$F!"$I$3$K6&M-(B # $B%i%$%V%i%j$,B8:_$9$k$+$r%W%m%0%i%`$K65$($kI,MW$,$"$k$3$H$KCm(B # $B0U$7$F$/$@$5$$!#(B LD_LIBRARY_PATH="." ./demo_use </PRE ></FONT ></TD ></TR ></TABLE ></P ></DIV ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="AEN258" >6.6. $B%U%!%$%k(B demo_dynamic.c</A ></H2 ><P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >/* demo_dynamic.c -- $BF0E*%m!<%G%#%s%0$H(B "hello" $B%k!<%A%s;HMQ$N<BNc(B */ /* $BF0E*$K%i%$%V%i%j$r%m!<%I$9$k%k!<%A%sMQ$K(B dlfcn.h $B$,I,MW(B */ #include <dlfcn.h> #include <stdio.h> /* "libhello.h" $B$r%$%s%/%k!<%I$9$kI,MW$,$J$$$3$H$K(B $BCm0U$7$F$/$@$5$$!#$7$+$7$J$,$i!"4XO"$9$k$b$N$r(B $B;XDj$9$kI,MW$O$"$j$^$9!#(Bdlsym() $B$+$iF@$h$&$H$7$F(B $B$$$kCM$rJ];}$9$k%?%$%W$r;XDj$9$kI,MW$,$"$j$^$9!#(B*/ /* "simple_demo_function" $B%?%$%W$O!"0z?t$r$H$i$:!"(B $B2?$bCM$rJV$5$J$$4X?t$r<($7$F$$$^$9!#(B */ typedef void (*simple_demo_function)(void); int main(void) { const char *error; void *module; simple_demo_function demo_function; /* $BF0E*$K%m!<%I$5$l$k%i%$%V%i%j$r%m!<%I$9$k(B */ module = dlopen("libhello.so", RTLD_LAZY); if (!module) { fprintf(stderr, "Couldn't open libhello.so: %s\n", dlerror()); exit(1); } /* $B%7%s%\%k$rF@$k(B */ dlerror(); demo_function = dlsym(module, "hello"); if ((error = dlerror())) { fprintf(stderr, "Couldn't find hello: %s\n", error); exit(1); } /* DL $B%i%$%V%i%jFb$N4X?t$r8F$S=P$9(B */ (*demo_function)(); /* $BA4$F$,=*N;$7$?$N$G!"J*;v$r$-$l$$$KJRIU$1$k(B */ dlclose(module); return 0; }</PRE ></FONT ></TD ></TR ></TABLE ></P ></DIV ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="AEN262" >6.7. $B%U%!%$%k(B script_dynamic</A ></H2 ><P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >#!/bin/sh # $BF0E*$K%m!<%I$5$l$k%i%$%V%i%j$N<BNc(B # libhello.so $B$H$=$NCg4V$,4{$K:n@.$5$l$F$$$k$b$N$H$7$^$9(B # ($B6&M-%i%$%V%i%j$NNc$r8+$F$/$@$5$$(B)$B!#(B # demo_dynamic $B%W%m%0%i%`%U%!%$%k$r%*%V%8%'%/%H%U%!%$%k$X(B # $B%3%s%Q%$%k$7$^$9!#(B gcc -Wall -g -c demo_dynamic.c # demo_use $B%W%m%0%i%`$r:n@.$7$^$9!#(B # $B$3$N%W%m%0%i%`$,;HMQ$9$kM#0l$NFCJL$J%i%$%V%i%j$O!"%W%m%0%i%`(B # $B5/F08e$^$G%m!<%I$5$l$J$$$N$G!"(BDL $B%i%$%V%i%j$r$I$3$KC5$7$K$$(B # $B$1$P$h$$$+$r65$($kI,MW$,$J$$$3$H$KCmL\$7$F$/$@$5$$!#$7$+$7$J(B # $B$,$i!"(BDL $B%i%$%V%i%j$r%m!<%I$9$k%i%$%V%i%j$r4^$a$k$?$a!"(B-ldl # $B%*%W%7%g%s$O(B '$BI,MW(B' $B$H$J$j$^$9!#(B gcc -g -o demo_dynamic demo_dynamic.o -ldl # $B%W%m%0%i%`$r<B9T$7$^$9!#(BLD_LIBRARY_PATH $B$r;H$$!"F0E*$K%m!<%I(B # $B$5$l$k%i%$%V%i%j$r$I$3$GF@$i$l$k$+$r65$($kI,MW$,$"$j$^$9!#(B LD_LIBRARY_PATH="." ./demo_dynamic</PRE ></FONT ></TD ></TR ></TABLE ></P ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="miscellaneous.html" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="info-sources.html" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >$B;(O?(B</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >$B$=$NB>$N>pJs8;(B</TD ></TR ></TABLE ></DIV ></BODY ></HTML >