📄 autobook_160.html
字号:
<HTML><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><!-- Created on September, 12 2004 by texi2html 1.64 --><!-- Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) Karl Berry <karl@freefriends.org> Olaf Bachmann <obachman@mathematik.uni-kl.de> and many others.Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>Send bugs and suggestions to <texi2html@mathematik.uni-kl.de> --><HEAD><TITLE>Autoconf, Automake, and Libtool: Module Access Functions</TITLE><META NAME="description" CONTENT="Autoconf, Automake, and Libtool: Module Access Functions"><META NAME="keywords" CONTENT="Autoconf, Automake, and Libtool: Module Access Functions"><META NAME="resource-type" CONTENT="document"><META NAME="distribution" CONTENT="global"><META NAME="Generator" CONTENT="texi2html 1.64"><script language="Javascript"><!-- // Check the browser version. function checkVersion() { if (navigator.appVersion.charAt(0)>=3) return true; if (navigator.appVersion.charAt(0)>=4) return true; else return false; } if (checkVersion()) { homeon = new Image(); homeon.src = "homeon.png"; homeoff = new Image(); homeoff.src = "home.png"; tocon = new Image(); tocon.src = "tocon.png"; tocoff = new Image(); tocoff.src = "toc.png"; indexon = new Image(); indexon.src = "indexon.png"; indexoff = new Image(); indexoff.src = "index.png"; helpon = new Image(); helpon.src = "helpon.png"; helpoff = new Image(); helpoff.src = "help.png"; backon = new Image(); backon.src = "backon.png"; backoff = new Image(); backoff.src = "back.png"; forwardon = new Image(); forwardon.src = "forwardon.png"; forwardoff = new Image(); forwardoff.src = "forward.png"; prevon = new Image(); prevon.src = "prevon.png"; prevoff = new Image(); prevoff.src = "prev.png"; nexton = new Image(); nexton.src = "nexton.png"; nextoff = new Image(); nextoff.src = "next.png"; upon = new Image(); upon.src = "upon.png"; upoff = new Image(); upoff.src = "up.png"; } function img_act(imgName) { if (checkVersion()) { imgOn = eval(imgName + "on.src"); document [imgName].src = imgOn; } } function img_inact(imgName) { if (checkVersion()) { imgOff = eval(imgName + "off.src"); document [imgName].src = imgOff; } }// --></SCRIPT></HEAD><BODY LANG="EN" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#6688AA" VLINK="#336688" ALINK="#808080"><A NAME="SEC160"></A><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=10><TR VALIGN="TOP"><TD ALIGN="MIDDLE" WIDTH=50 BGCOLOR="#e6e6e6"><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_159.html#SEC159" onMouseover="img_act('prev')" onMouseout="img_inact('prev')"><IMG SRC="prev.png" BORDER="0" ALT="Back: Dynamic Modules" ALIGN="MIDDLE" NAME="prev"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_161.html#SEC161" onMouseover="img_act('next')" onMouseout="img_inact('next')"><IMG SRC="next.png" BORDER="0" ALT="Forward: Finding a Module" ALIGN="MIDDLE" NAME="next"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_161.html#SEC161" onMouseover="img_act('back')" onMouseout="img_inact('back')"><IMG SRC="back.png" BORDER="0" ALT="FastBack: Finding a Module" ALIGN="MIDDLE" NAME="back"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_158.html#SEC158" onMouseover="img_act('up')" onMouseout="img_inact('up')"><IMG SRC="up.png" BORDER="0" ALT="Up: Dynamic Loading" ALIGN="MIDDLE" NAME="up"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_164.html#SEC164" onMouseover="img_act('forward')" onMouseout="img_inact('forward')"><IMG SRC="forward.png" BORDER="0" ALT="FastForward: Using GNU libltdl" ALIGN="MIDDLE" NAME="forward"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook.html#SEC_Top" onMouseover="img_act('home')" onMouseout="img_inact('home')"><IMG SRC="home.png" BORDER="0" ALT="Top: Autoconf, Automake, and Libtool" ALIGN="MIDDLE" NAME="home"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_toc.html#SEC_Contents" onMouseover="img_act('toc')" onMouseout="img_inact('toc')"><IMG SRC="toc.png" BORDER="0" ALT="Contents: Table of Contents" ALIGN="MIDDLE" NAME="toc"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_285.html#SEC285" onMouseover="img_act('index')" onMouseout="img_inact('index')"><IMG SRC="index.png" BORDER="0" ALT="Index: Index" ALIGN="MIDDLE" NAME="index"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_abt.html#SEC_About" onMouseover="img_act('help')" onMouseout="img_inact('help')"><IMG SRC="help.png" BORDER="0" ALT="About: About this document" ALIGN="MIDDLE" NAME="help"></A></TD></TR></TABLE></TD><TD ALIGN="LEFT"><H2> 17.2 Module Access Functions </H2><!--docid::SEC160::--><P>In order to access the functionality of dynamic modules, differentarchitectures provide various APIs to bring the code from themodule into the address space of the loading program, and to access thesymbols exported by that module.</P><P>GNU/Linux uses the dynamic module API introduced by Sun'sSolaris operating system, and widely adopted (and adapted!) by themajority of modern Unices<A NAME="DOCF39" HREF="autobook_fot.html#FOOT39">(39)</A>. The interface consists of four functions. In practice, youreally ought not to use these functions, since you would be locking yourproject into this single API, and the class of machines thatsupports it. This description is over-simplified to serve as acomparison with the fully portable libltdl API described in<A HREF="autobook_164.html#SEC164">18. Using GNU libltdl</A>. The minutiae are not discussed, because thereinlie the implementation peculiarities that spoil the portability of thisAPI. As they stand, these descriptions give a good overview ofhow the functions work at a high level, and are broadly applicable tothe various implementations in use. If you are curious, the details ofyour machines particular dynamic loading API will be available inits system manual pages. </P><P><A NAME="IDX22"></A><DL><DT><U>Function:</U> void * <B>dlopen</B> <I>(const char *<VAR>filename</VAR>, int <VAR>flag</VAR>)</I><DD>This function brings the code from a named module into the address spaceof the running program that calls it, and returns a handle which is usedby the other API functions. If <VAR>filename</VAR> is not an absolutepath, GNU/Linux will search for it in directories named in the<SAMP>`LD_LIBRARY_PATH'</SAMP> environment variable, and then in the standardlibrary directories before giving up.</P><P>The flag argument is made by `OR'ing together various flag bitsdefined in the system headers. On GNU/Linux, these flags aredefined in <TT>`dlfcn.h'</TT>:</P><P><DL COMPACT><DT><SAMP>`RTLD_LAZY'</SAMP><DD>Resolve undefined symbols when they are first used.<P><DT><SAMP>`RTLD_NOW'</SAMP><DD>If all symbols cannot be resolved when the module is loaded,<CODE>dlopen</CODE> will fail and return <SAMP>`NULL'</SAMP>.<P><DT><SAMP>`RTLD_GLOBAL'</SAMP><DD>All of the global symbols in the loaded module will be available toresolve undefined symbols in subsequently loaded modules.</DL></DL><P><A NAME="IDX23"></A><DL><DT><U>Function:</U> void * <B>dlsym</B> <I>(void *<VAR>handle</VAR>, char *<VAR>name</VAR>)</I><DD>Returns the address of the named symbol in the module which returned<VAR>handle</VAR> when it was <CODE>dlopen</CODE>ed. You must cast the returnedaddress to a known type before using it.</DL></P><P><A NAME="IDX24"></A><DL><DT><U>Function:</U> int <B>dlclose</B> <I>(void *<VAR>handle</VAR>)</I><DD>When you are finished with a particular module, it can be removed frommemory using this function.</DL></P><P><A NAME="IDX25"></A><DL><DT><U>Function:</U> const char * <B>dlerror</B> <I>(void)</I><DD>If any of the other three API calls fails, this function returns astring which describes the last error that occurred.</DL></P><P>In order to use these functions on GNU/Linux, you must<CODE>#include <dlfcn.h></CODE> for the function prototypes, and link with<SAMP>`-ldl'</SAMP> to provide the API implementation. Other Unices use<SAMP>`-ldld'</SAMP> or provide the implementation of the API inside thestandard C library.</P><P><A NAME="Finding a Module"></A></TR></TABLE><BR> <FONT SIZE="-1">This document was generatedby <I>Gary V. Vaughan</I> on <I>September, 12 2004</I>using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html"><I>texi2html</I></A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -