NAME
dlclose() — close a shared library
SYNOPSIS
cc
[flag ... ]
file ...
-ldl
[library]...
#include <dlfcn.h>
int dlclose(void *handle);
Multithread Usage
This routine is thread-safe.
NOTE:
The dynamic loader serializes the loading and unloading of shared
libraries in multithreaded applications using a recursive pthread
mutex lock.
See the
HP-UX Linker and Libraries Online User Guide
for more information.
DESCRIPTION
dlclose()
is one of a family of routines that give the user
direct access to the dynamic linking facilities (using the
-ldl
option on the compiler or
ld
command line).
dlclose()
disassociates a shared object previously opened by
dlopen()
from the current process. Once an object has been
closed using
dlclose(),
its symbols are no longer available to
dlsym().
All objects loaded automatically as a result of
invoking
dlopen()
on the referenced object (see
dlopen(3C))
are also closed.
handle
is the value returned by a previous invocation of
dlopen().
RETURN VALUE
If the referenced object was successfully closed,
dlclose()
returns
0.
If the object could not be closed, or if handle does not refer to
an open object,
dlclose()
returns a non-0 value.
More detailed diagnostic information is available through
dlerror().
ERRORS
If
dlclose()
fails, a subsequent call to
dlerrno()
returns one of the following values.
- RTLD_ERR_CANT_APPLY_RELOC
Cannot apply relocation in library.
- RTLD_ERR_DLCLOSE_REMAINING_DEP
Cannot close library due to remaining dependencies.
- RTLD_ERR_INV_HANDLE
Invalid handle.
- RTLD_ERR_NO_MEMORY
Out of memory.
- RTLD_ERR_SETCANCELSTATE_FAILED
__thread_setcancelstate
failed on entry to or exit from
dlclose().
- RTLD_ERR_SIGENABLE_FAILED
sigenable
failed on exit from
dlclose().
- RTLD_ERR_SIGINHIBIT_FAILED
siginhibit
failed on entry to
dlclose().
- RTLD_ERR_UNKNOWN_HANDLE
Unknown handle.
WARNINGS
A successful invocation of
dlclose()
does not guarantee that
the objects associated with
handle
have actually been removed
from the address space of the process.
Objects loaded by one invocation of
dlopen()
may also be loaded by another
invocation of
dlopen().
The same object may also be opened multiple times.
An object is not removed from the address
space until all references to that object through an explicit
dlopen()
invocation have been closed and all other objects
implicitly referencing that object have also been closed.
Once an object has been closed by
dlclose(),
referencing symbols
contained in that object can cause undefined behavior.