OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [uClibc/] [ldso/] [man/] [ld.so.texi] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1325 phoenix
\input texinfo @c -*-texinfo-*-
2
@c %**start of header
3
@setfilename ld.so.info
4
@settitle ld.so : Dynamic-Link Library support
5
@c %**end of header
6
 
7
@ifinfo
8
This file documents the dynamic-link support libraries and utilities for the
9
Linux OS, version 1.8.1.
10
 
11
Copyright 1996 Michael Deutschmann
12
 
13
This document is subject to the GNU General Public License as published by
14
the Free Software foundation, version 2 or later (your choice).
15
 
16
Note: The software described in this document is under a different copyright
17
and license.
18
 
19
@end ifinfo
20
 
21
@titlepage
22
@title ld.so
23
@subtitle Dynamic Link library support for the Linux OS.
24
@author David Engel
25
@author Eric Youngdale
26
@author Peter Macdonald
27
@author Hongjiu Lu
28
@author Mitch D'Souza
29
@author Michael Deutschmann (this documentation)
30
 
31
@page
32
Copyright @copyright{} 1996 Michael Deutschmann
33
 
34
This document is subject to the GNU General Public License as published by
35
the Free Software foundation, version 2 or later (your choice).
36
 
37
Note: The software described in this document is under a different copyright
38
and license.
39
@end titlepage
40
 
41
@ifinfo
42
@node Top
43
@top
44
 
45
The @code{ld.so} module provides dynamic linked library support in Linux.
46
This file documents @code{ld.so} and its companion software.
47
 
48
@menu
49
* intro::       Introduction
50
 
51
* ld.so::       The dynamic linker core program
52
* ldd::         A utility to print out dependencies
53
* ldconfig::    A utility to maintain the cache and symlinks
54
* libdl::       Manual dynamic linking library
55
@end menu
56
 
57
@end ifinfo
58
 
59
@node intro
60
@unnumbered Introduction
61
 
62
The @code{ld.so} suite contains special files and utilities needed for linux
63
to handle @dfn{dynamic libraries}.
64
 
65
Ordinary static libraries (@file{lib*.a} files) are included into executables
66
that use their functions. A file that only uses static libraries needs less
67
intelligence to load, but takes up more space. If many executables use the
68
same library, there can be much wastage of storage space, since multiple
69
copies of the library functions are scattered across the executables.
70
However, static libraries are easier to make.
71
 
72
Dynamic libraries (@file{lib*.so*} files) are not copied into executables ---
73
the executable is written in such a way that it will automatically load the
74
libraries. In linux, the executable will first load the special library
75
@code{ld.so} or @code{ld-linux.so}, which contains the intelligence
76
to load further dynamic libraries. Since multiple files end up getting
77
executable data from the same file, dynamic libraries are also known as
78
shared libraries.
79
 
80
Linux executables come in two flavors, @sc{elf} and a.out.
81
 
82
a.out is the original executable format used by Linux. It has somewhat less
83
overhead than @sc{elf}. However creating shared libraries for a.out is
84
@emph{very} involved, and each a.out shared library must be explicitly
85
registered.
86
 
87
@sc{elf} is a more recent format, which supports a much simpler method of
88
creating libraries. @sc{elf} libraries may also be linked manually
89
(@pxref{libdl}).
90
 
91
Since many library authors prefer @sc{elf} and no longer release shared a.out
92
libraries, a.out is moribund on Linux. This version of the @code{ld.so} can
93
be compiled to support only @sc{elf}, or to support both formats. (The last
94
release of ld.so to support a.out alone was 1.8.0.)
95
 
96
@node ld.so
97
@chapter @code{ld.so}: Dynamic linker core
98
 
99
@code{ld.so} works behind the scenes to handle dynamic libraries in Linux.
100
Users will almost never have to deal with it directly, but in special cases
101
one can send instructions to it through environment variables. Also, if
102
something is wrong with your libraries (usually an incorrect version) ld.so
103
will give error messages.
104
 
105
Actually @code{ld.so} is the a.out linker. The new @sc{elf} executables are
106
handled by a related program @code{ld-linux.so}.
107
 
108
@menu
109
* files::       Configuration files used by the suite
110
* environment:: Environment settings that tweak @code{ld.so}
111
* errors::      Complaints @code{ld.so} might make
112
@end menu
113
 
114
@node files
115
@section Configuration Files
116
 
117
@table @file
118
@item /etc/ld.so.cache
119
A file created by @code{ldconfig} and used to speed linking. It's structure
120
is private to the suite.
121
 
122
@item /etc/ld.so.conf
123
A simple list of directories to scan for libraries, in addition to
124
@file{/usr/lib} and @file{/lib}, which are hardwired. It may contain
125
comments started with a @samp{#}.
126
 
127
@item /etc/ld.so.preload
128
A list of libraries to preload. This allows preloading libraries for
129
setuid/setgid executables securely. It may contain comments.
130
@end table
131
 
132
@node environment
133
@section Environment Variables
134
 
135
@table @code
136
@item LD_AOUT_LIBRARY_PATH
137
@itemx LD_LIBRARY_PATH
138
These variables supply a library path for finding dynamic libraries, in the
139
standard colon seperated format. These variables are ignored when executing
140
setuid/setgid programs, because otherwise they would be a security hazard.
141
@code{ld.so} will use @code{LD_AOUT_LIBRARY_PATH} and @code{ld-linux.so} will
142
use @code{LD_LIBRARY_PATH}.
143
 
144
@item LD_AOUT_PRELOAD
145
@itemx LD_PRELOAD
146
These variables allow an extra library not specified in the executable to be
147
loaded. Generally this is only useful if you want to override a function.
148
These are also ignored when running setuid/setgid executables. @code{ld.so}
149
will use @code{LD_AOUT_PRELOAD} and @code{ld-linux.so} will use
150
@code{LD_PRELOAD}.
151
 
152
@item LD_NOWARN
153
If non-empty, errors about incompatible minor revisions are suppressed.
154
 
155
@item LD_KEEPDIR
156
If non-empty, allow executables to specify absolute library names. This
157
option is deprecated.
158
@c FIXME:
159
@c The following are things I noticed in the ld-linux.so source.
160
@c I don't really understand 'em. Could someone help me?
161
@c
162
@c @item LD_BIND_NOW
163
@c This option is used by the @code{ld-linux.so} only. I don't know
164
@c what it does. (I suspect, looking at the code, that it specifies
165
@c "RTLD_NOW" rather than "RTLD_LAZY" mode for the shared libraries.)
166
@c
167
@c @item LD_TRACE_LOADED_OBJECTS
168
@c @itemx LD_WARN
169
@c These seem to have something to do with the communication between the
170
@c @code{ld-linux.so} and @code{ldd}. I don't know more.
171
@end table
172
 
173
@node errors
174
@section Errors
175
 
176
@table @samp
177
@item Can't find library @var{library}
178
The executable required a dynamically linked library that ld.so cannot find.
179
Your symbolic links may be not set right, or you may have not installed a
180
library needed by the program.
181
 
182
@item Can't load library @var{library}
183
The library is corrupt.
184
 
185
@item Incompatible library @var{library}
186
@itemx   Require major version @var{x} and found @var{y}
187
Your version of the library is incompatible with the executable. Recompiling
188
the executable, or upgrading the library will fix the problem.
189
 
190
@item using incompatible library @var{library}
191
@itemx   Desire minor version >= @var{x} and found @var{y}.
192
Your version of the library is older than that expected by the executable,
193
but not so old that the library interface has radically changed, so the
194
linker will attempt to run anyway. There is a chance that it will work, but
195
you should upgrade the library or recompile the software. The environment
196
variable @code{LD_NOWARN} can be used to supress this message.
197
 
198
@item too many directories in library path
199
The linker only supports up to 32 library directories. You have too many.
200
 
201
@item dynamic linker error in @var{blah}
202
The linker is having trouble handling a binary - it is probably corrupt.
203
 
204
@item can't map cache file @var{cache-file}
205
@itemx cache file @var{cache-file} @var{blah}
206
The linker cache file (generally @file{/etc/ld.so.cache}) is corrupt or
207
non-existent. These errors can be ignored, and can be prevented by
208
regenerating the cache file with @code{ldconfig}.
209
@end table
210
 
211
@node ldd
212
@chapter @code{ldd}: Dependency scanner
213
 
214
@code{ldd} is a utility that prints out the dynamic libraries that an
215
executable is linked to.
216
 
217
Actually @code{ldd} works by signalling ld.so to print the dependencies.
218
For a.out executables this is done by starting the executable with
219
@code{argc} equal to 0. The linker detects this and prints the dependencies.
220
(This can cause problems with @emph{very} old binaries, which would run as
221
normal only with an inappropriate @code{argc}.)
222
 
223
For @sc{elf} executables, special environment variables are used to tell the
224
linker to print the dependencies.
225
 
226
@code{ldd} has a few options:
227
 
228
@table @samp
229
@item -v
230
Print the version number of @code{ldd} itself
231
 
232
@item -V
233
Print the version number of the dynamic linker
234
 
235
@item -d
236
Report missing functions. This is only supported for @sc{elf} executables.
237
 
238
@item -r
239
Report missing objects. This is also only available for @sc{elf}
240
executables.
241
@end table
242
 
243
@node ldconfig
244
@chapter @code{ldconfig}: Setup program
245
 
246
This utility is used by the system administrator to automatically set up
247
symbolic links needed by the libraries, and also to set up the cache file.
248
 
249
@code{ldconfig} is run after new dynamic libraries are installed, and if the
250
cache file or links are damaged. It is also run when upgrading the
251
@code{ld.so} suite itself.
252
 
253
The @file{/lib} and @file{/usr/lib} directories, and any listed in the file
254
@file{/etc/ld.so.conf} are scanned by default unless @samp{-n} is used.
255
Additional directories may be specified on the command line.
256
 
257
It has the following options:
258
 
259
@table @samp
260
@item -D
261
Enter debug mode. Implies @samp{-N} and @samp{-X}.
262
 
263
@item -v
264
Verbose. Print out links created and directories scanned.
265
 
266
@item -n
267
Check directories specified on the commandline @emph{only}.
268
 
269
@item -N
270
Do not regenerate the cache.
271
 
272
@item -X
273
Do not rebuild symbolic links.
274
 
275
@item -l
276
Set up symbolic links for only libraries presented on the command line.
277
 
278
@item -p
279
Print out the library pathnames in the cache file (@file{/etc/ld.so.cache})
280
@end table
281
 
282
@node libdl
283
@chapter User dynamic linking library
284
 
285
The @code{ld.so} package includes a small library of functions
286
(@code{libdl}) to allow manual dynamic linking. Normally programs are linked
287
so that dynamic functions and objects are automagically available. These
288
functions allow one to manually load and access a symbol from a library.
289
They are only available for @sc{elf} executables.
290
 
291
@menu
292
* using libdl:: General points
293
* functions::   How to use the functions
294
* example::     A sample program
295
@end menu
296
 
297
@node using libdl
298
@section Overview
299
 
300
To access this library, add the flag @samp{-ldl} to your compile command when
301
linking the executable. You also must include the header file
302
@code{dlfcn.h}. You may also need the flag @samp{-rdynamic}, which enables
303
resolving references in the loaded libraries against your executable.
304
 
305
Generally, you will first use @code{dlopen} to open a library. Then you use
306
@code{dlsym} one or more times to access symbols. Finally you use
307
@code{dlclose} to close the library.
308
 
309
These facilities are most useful for language interpreters that provide
310
access to external libraries. Without @code{libdl}, it would be neccessary
311
to link the interpreter executable with any and all external libraries
312
needed by the programs it runs. With @code{libdl}, the interpreter only
313
needs to be linked with the libraries it uses itself, and can dynamically
314
load in additional ones if programs need it.
315
 
316
@node functions
317
@section Functions
318
 
319
@deftypefun void *dlopen ( const char @var{filename}, int @var{flags} )
320
 
321
This function opens the dynamic library specified by @var{filename}
322
and returns an abstract handle, which can be used in subsequent calls to
323
@code{dlsym}. The function will respect the @code{LD_ELF_LIBRARY_PATH} and
324
@code{LD_LIBRARY_PATH} environment variables.
325
 
326
@end deftypefun
327
 
328
The following flags can be used with @code{dlopen}:
329
 
330
@deftypevr Macro int RTLD_LAZY
331
Resolve symbols in the library as they are needed.
332
@end deftypevr
333
 
334
@deftypevr Macro int RTLD_NOW
335
Resolve all symbols in the library before returning, and fail if not all can
336
be resolved. This is mutually exclusive with @code{RTLD_LAZY}.
337
@end deftypevr
338
 
339
@deftypevr Macro int RTLD_GLOBAL
340
Make symbols in this library available for resolving symbols in other
341
libraries loaded with @code{dlopen}.
342
@end deftypevr
343
 
344
@deftypefun int dlclose ( void *@var{handle} )
345
 
346
This function releases a library handle.
347
 
348
Note that if a library opened twice, the handle will be the same. However,
349
a reference count is used, so you should still close the library as many
350
times as you open it.
351
 
352
@end deftypefun
353
 
354
@deftypefun void *dlsym (void *@var{handle},char *@var{symbol-name})
355
 
356
This function looks up the name @var{symbol-name} in the library and returns
357
it in the void pointer.
358
 
359
If there is an error, a null pointer will be returned. However, it is
360
possible for a valid name in the library to have a null value, so
361
@code{dlerror} should be used to check if there was an error.
362
 
363
@end deftypefun
364
 
365
@deftypefun {libdl function} {const char} *dlerror( void )
366
 
367
This function is used to read the error state. It returns a human-readable
368
string describing the last error, or null, meaning no error.
369
 
370
The function resets the error value each time it is called, so the result
371
should be copied into a variable. If the function is called more than once
372
after an error, the second and subsequent calls will return null.
373
 
374
@end deftypefun
375
 
376
@node example
377
@section Example program
378
 
379
Here is an example program that prints the cosine of two by manually linking
380
to the math library:
381
 
382
@example
383
@c The following was snarfed verbatim from the dlopen.3 man file.
384
#include <stdio.h>
385
#include <dlfcn.h>
386
 
387
int main(int argc, char **argv) @{
388
    void *handle;
389
    double (*cosine)(double);
390
    char *error;
391
 
392
    handle = dlopen ("/lib/libm.so", RTLD_LAZY);
393
    if (!handle) @{
394
        fputs (dlerror(), stderr);
395
        exit(1);
396
    @}
397
 
398
    cosine = dlsym(handle, "cos");
399
    if ((error = dlerror()) != NULL)  @{
400
        fputs(error, stderr);
401
        exit(1);
402
    @}
403
 
404
    printf ("%f\\n", (*cosine)(2.0));
405
    dlclose(handle);
406
@}
407
@end example
408
 
409
@contents
410
 
411
@bye

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.