<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2448.0">
<TITLE>RE: [LCP]Dynamic libraries and plugins</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>&gt; If I use a</FONT>
<BR><FONT SIZE=2>&gt; function from a library that's not compiled INTO my program, </FONT>
<BR><FONT SIZE=2>&gt; how does my</FONT>
<BR><FONT SIZE=2>&gt; program&nbsp; use of it?&nbsp; After all, if this is the case, then it </FONT>
<BR><FONT SIZE=2>&gt; would have</FONT>
<BR><FONT SIZE=2>&gt; to lookup a specific library from disk.&nbsp; So is there some</FONT>
</P>

<P><FONT SIZE=2>A program is linked to the shared (dynamic) libraries it</FONT>
<BR><FONT SIZE=2>uses (.so files). The .so files are just not included in</FONT>
<BR><FONT SIZE=2>the final elf (or whatever exe format you happen to use).</FONT>
<BR><FONT SIZE=2>At load time (hence dynamic), the necessary shared libs</FONT>
<BR><FONT SIZE=2>are looked up (you can find out what foo needs by running</FONT>
<BR><FONT SIZE=2>&quot;ldd foo&quot;) and loaded if not already. If several programs</FONT>
<BR><FONT SIZE=2>need it, they all have read/execute access on the</FONT>
<BR><FONT SIZE=2>appropriate pages, so the lib is loaded only once in</FONT>
<BR><FONT SIZE=2>memory (hence shared).</FONT>
<BR><FONT SIZE=2>The load code does some load time linking, which I suspect</FONT>
<BR><FONT SIZE=2>(but am not sure) boils down to replacing in the code the</FONT>
<BR><FONT SIZE=2>addresses of jumps to the lib routines by the ones which</FONT>
<BR><FONT SIZE=2>corresponds to the address the shared lib is loaded at.</FONT>
</P>

<P><FONT SIZE=2>You can do this by hand if you want to, but you'll have to</FONT>
<BR><FONT SIZE=2>use function pointers: lookup dlopen, dlsym and friends.</FONT>
<BR><FONT SIZE=2>This is how you can load a library at runtime. Handy for</FONT>
<BR><FONT SIZE=2>things like drivers, or user customization libs.</FONT>
</P>

<P><FONT SIZE=2>-- </FONT>
<BR><FONT SIZE=2>Vincent Penquerc'h </FONT>
</P>

</BODY>
</HTML>