blob: 9a91becf1d217bbfb6b55db97dd53c0be145e2a4 [file] [log] [blame]
% File src/library/base/man/library.dynam.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2017 R Core Team
% Distributed under GPL 2 or later
\name{library.dynam}
\alias{library.dynam}
\alias{library.dynam.unload}
\alias{.dynLibs}
\title{Loading DLLs from Packages}
\description{
Load the specified file of compiled code if it has not been loaded
already, or unloads it.
}
\usage{
library.dynam(chname, package, lib.loc,
verbose = getOption("verbose"),
file.ext = .Platform$dynlib.ext, \dots)
library.dynam.unload(chname, libpath,
verbose = getOption("verbose"),
file.ext = .Platform$dynlib.ext)
.dynLibs(new)
}
\arguments{
\item{chname}{a character string naming a DLL (also known as a dynamic
shared object or library) to load.}
\item{package}{a character vector with the name of package.}
\item{lib.loc}{a character vector describing the location of \R
library trees to search through.}
\item{libpath}{the path to the loaded package whose DLL is to be unloaded.}
\item{verbose}{a logical value indicating whether an announcement
is printed on the console before loading the DLL. The
default value is taken from the verbose entry in the system
\code{\link{options}}.}
\item{file.ext}{the extension (including \samp{.} if used) to append
to the file name to specify the library to be loaded. This defaults
to the appropriate value for the operating system.}
\item{\dots}{additional arguments needed by some libraries that
are passed to the call to \code{\link{dyn.load}} to control
how the library and its dependencies are loaded.}
\item{new}{a list of \code{"DLLInfo"} objects corresponding to the
DLLs loaded by packages. Can be missing.}
}
\details{
See \code{\link{dyn.load}} for what sort of objects these functions handle.
\code{library.dynam} is designed to be used inside a package rather
than at the command line, and should really only be used inside
\code{\link{.onLoad}}. The system-specific extension for DLLs (e.g.,
\file{.so} or \file{.sl} on Unix-alike systems,
\file{.dll} on Windows) should not be added.
#ifdef windows
If \code{\dots} does not include a named argument \code{DLLpath},
\code{\link{dyn.load}} is called with \code{DLLpath} set to the
package's \file{libs} directory. See the \dQuote{Windows} section of
the help on \code{\link{dyn.load}} for how to control where dependent
DLLs are found.
See \code{\link{dyn.load}} for comments about diagnostic messages
which may be seen on Windows.
#endif
\code{library.dynam.unload} is designed for use in
\code{\link{.onUnload}}: it unloads the DLL and updates the value of
\code{.dynLibs()}
\code{.dynLibs} is used for getting (with no argument) or setting the
DLLs which are currently loaded by packages (using \code{library.dynam}).
}
\value{
If \code{chname} is not specified, \code{library.dynam} returns an
object of class \code{"\link{DLLInfoList}"} corresponding to the DLLs
loaded by packages.
If \code{chname} is specified, an object of class
\code{"\link{DLLInfo}"} that identifies the DLL and which can be used
in future calls is returned invisibly. Note that the class
\code{"\link{DLLInfo}"} has a method for \code{$} which can be used to
resolve native symbols within that DLL.
\code{library.dynam.unload} invisibly returns an object of class
\code{"\link{DLLInfo}"} identifying the DLL successfully unloaded.
\code{.dynLibs} returns an object of class \code{"\link{DLLInfoList}"}
corresponding corresponding to its current value.
}
\section{Warning}{
Do not use \code{\link{dyn.unload}} on a DLL loaded by
\code{library.dynam}: use \code{library.dynam.unload} to ensure
that \code{.dynLibs} gets updated. Otherwise a subsequent call to
\code{library.dynam} will be told the object is already loaded.
Note that whether or not it is possible to unload a DLL and then
reload a revised version of the same file is OS-dependent: see the
\sQuote{Value} section of the help for \code{\link{dyn.unload}}.
}
\seealso{
\code{\link{getLoadedDLLs}} for information on \code{"DLLInfo"} and
\code{"DLLInfoList"} objects.
\code{\link{.onLoad}}, \code{\link{library}},
\code{\link{dyn.load}}, \code{\link{.packages}},
\code{\link{.libPaths}}
\code{\link{SHLIB}} for how to create suitable DLLs.
}
\references{
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)
\emph{The New S Language}.
Wadsworth & Brooks/Cole.
}
\examples{
## Which DLLs were dynamically loaded by packages?
library.dynam()
## More on library.dynam.unload() :
\donttest{require(nlme)
nlme:::.onUnload # shows library.dynam.unload() call
detach("package:nlme") # by default, unload=FALSE , so,
tail(library.dynam(), 2)# nlme still there
## How to unload the DLL ?
## Best is to unload the namespace, unloadNamespace("nlme")
## If we need to do it separately which should be exceptional:
pd.file <- attr(packageDescription("nlme"), "file")
library.dynam.unload("nlme", libpath = sub("/Meta.*", '', pd.file))
tail(library.dynam(), 2)# 'nlme' is gone now
unloadNamespace("nlme") # now gives warning
}
}
\keyword{data}