process.dlopen(module, filename[, flags])
module
<Object>filename
<string>flags
<os.constants.dlopen> 默认值:os.constants.dlopen.RTLD_LAZY
require()
主要用于加载 C++ 插件,除非特殊情况,否则不应直接使用。
flags
参数是整数,允许指定 dlopen 行为。
有关详细信息,请参阅 os.constants.dlopen
文档。
在此示例中,假定常量可用。
const os = require('os');
process.dlopen(module, require.resolve('binding'),
os.constants.dlopen.RTLD_NOW);
module.exports.foo();
module
<Object>filename
<string>flags
<os.constants.dlopen> Default:os.constants.dlopen.RTLD_LAZY
The process.dlopen()
method allows to dynamically load shared
objects. It is primarily used by require()
to load
C++ Addons, and should not be used directly, except in special
cases. In other words, require()
should be preferred over
process.dlopen()
, unless there are specific reasons.
The flags
argument is an integer that allows to specify dlopen
behavior. See the os.constants.dlopen
documentation for details.
If there are specific reasons to use process.dlopen()
(for instance,
to specify dlopen flags), it's often useful to use require.resolve()
to look up the module's path.
An important drawback when calling process.dlopen()
is that the module
instance must be passed. Functions exported by the C++ Addon will be accessible
via module.exports
.
The example below shows how to load a C++ Addon, named as binding
,
that exports a foo
function. All the symbols will be loaded before
the call returns, by passing the RTLD_NOW
constant. In this example
the constant is assumed to be available.
const os = require('os');
process.dlopen(module, require.resolve('binding'),
os.constants.dlopen.RTLD_NOW);
module.exports.foo();