跳到主要内容
CNode

nodejs的C/C++ addons机制是怎么实现的?

社区
Ggaubee发布于 13 年前最后回复 13 年前
487530

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

查看回复

回复 (4)

Y
yourke#413 年前
#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实现上诉功能。

C
chishaxie#313 年前

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

M
myy#213 年前

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

S
seasonx4#113 年前

V8 好像有这个API

参与回复

登录后即可参与回复。登录