在没有node-waf的情况下构建node.js插件

时间:2011-07-12 09:46:23

标签: node.js g++ eclipse-cdt

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

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

我应该链接哪些库以及我应该传递哪种选项才能使其正常工作?

目前,如果我尝试require我的lib:

,我会收到以下错误
SyntaxError: Unexpected token ILLEGAL

2 个答案:

答案 0 :(得分:8)

终于找到了答案。

必需的编译器标志:

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

链接器标志:

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

导入并注意:

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

答案 1 :(得分:3)

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

以下Makefile将mod.cpp编译为MacOSX Lion中的 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

$ file mod.o

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

$ file mod.node

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

正在运行make:

node app.js
{ hello: 'World' }

注意:来自Addons tutorial

的mod.cpp的源代码