[英]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.