繁体   English   中英

构建没有 node-waf 的 node.js 插件

[英]Build node.js addon without node-waf

我正在使用 Eclipse CDT 在 C++ 中编写一个简单的 node.js 插件。 该项目有很多文件,我想使用 Eclipse 的托管构建系统。

我可以使用node-waf编译一个简单的插件示例,但我无法配置我的 Eclipse 工具链来构建一个没有 waf 的正确共享库。 Waf 在幕后使用 gcc,所以我确信这是可能的。

我应该链接到哪些库以及我应该传递什么样的选项才能使其工作?

目前,如果我尝试require我的库,我会收到以下错误:

SyntaxError: Unexpected token ILLEGAL

终于找到了答案。

必需的编译器标志:

g++ 
    -g 
    -fPIC 
    -DPIC 
    -D_LARGEFILE_SOURCE 
    -D_FILE_OFFSET_BITS=64 
    -D_GNU_SOURCE 
    -DEV_MULTIPLICITY=0 
    -I/usr/local/include/node 
    addon.cc 
    -c 
    -o addon.o

Linker 标志:

g++ addon.o -o addon.node -shared -L/usr/local/lib

重要提示:

共享库必须具有扩展名.node ,例如: foobar.node

我没有在 Linux 中尝试过,但至少在 OSX 中我不得不使用-undefined suppress-flat_namespace ,因为 node.js(v0.4.12) 在可执行文件中有它自己的静态链接的 v8 库。

以下 Makefile 在 MacOSX Lion 中将 mod.cpp 编译成mod.node

all: mod.node
    node app.js

mod.o: mod.cpp
    g++ -g -fPIC -DPIC -D_LARGEFILE_SOURCE -m64 -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DEV_MULTIPLICITY=0 -I/usr/local/include/node mod.cpp -c -o mod.o

mod.node: mod.o
    g++ -flat_namespace mod.o -o mod.node -undefined suppress -bundle -L/usr/local/lib

clean:
    rm mod.o
    rm mod.node

$ 文件 mod.o

mod.o: Mach-O 64-bit object x86_64

$ 文件 mod.node

mod.node: Mach-O 64-bit bundle x86_64

运行制作:

node app.js
{ hello: 'World' }

注意: mod.cpp 的源代码来自插件教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM