nodejs的C/C++ addons机制是怎么实现的? - CNode技术社区

nodejs的C/C++ addons机制是怎么实现的?
发布于 13 年前 作者 gaubee 8479 次浏览 最后一次编辑是 9 年前

它的编译器是GCC吗?原理是否跟GCC编译共享库的原理一样?

4 回复

V8 好像有这个API

技术上说就是动态库,windows下就是 dll

Linux下是gcc和共享库,笔者亲测......

#define NODE_MODULE(modname, regfunc) \
 extern "C" { \
 NODE_MODULE_EXPORT node::node_module_struct modname ## _module = \
 { \
 NODE_STANDARD_MODULE_STUFF, \
 regfunc, \
 NODE_STRINGIFY(modname) \
 }; \
 }

NODE_MODULE(name, init);展开后就是:

extern "C" {
 node::node_module_struct name_module =
 {
 1,//NODE_MODULE_VERSION
 NULL,
 __FILE__,
 init,
 "name"
 };
}

其实就是定义了一个结构体,编译后为动态链接库 .node 文件中的一个符号,最后使用的时候由 node.cc 调用uv_dlopenuv_dlsym动态链接模块,得到初始化函数并执行。

mod->register_func(target);

uv库封装了对动态链接文件操作的具体实现,win下实际调用 LoadLibraryExW 和 GetProcAddress,*nix下实际调用dlopen和dlsym实现上诉功能。

回到顶部

AltStyle によって変換されたページ (->オリジナル) /