Sophie

Sophie

distrib > Mandriva > 9.2 > i586 > by-pkgid > a804ef007a99f7d26cf24253c2994680 > files > 1191

howto-html-ja-9.1-0.5mdk.noarch.rpm

<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 &#60;stdio.h&#62;

void hello(void) {
  printf("Hello, library world.\n");
}&#13;</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);&#13;</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&#13;</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 &#60;dlfcn.h&#62;

#include &#60;stdio.h&#62;

/* "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"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>$B$=$NB>$N>pJs8;(B</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>