在没有node-waf的情况下构buildnode.js插件
我使用Eclipse CDT在C ++中编写了一个简单的node.js插件。 该项目有很多文件,我想使用Eclipse的托pipe构build系统。
我可以使用node-waf
编译一个简单的插件示例,但是我不能将我的Eclipse工具链configuration为在没有waf的情况下构build适当的共享库。 Waf在幕后使用gcc,所以我相信这是可能的。
我应该链接到哪些库,以及应该传递哪些选项以使其工作?
目前我得到以下错误,如果我试图require
我的lib:
SyntaxError: Unexpected token ILLEGAL
终于find了答案。
必需的编译器标志
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
我没有尝试在Linux中,但至less在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
$文件mod.o
mod.o: Mach-O 64-bit object x86_64
$文件mod.node
mod.node: Mach-O 64-bit bundle x86_64
运行make:
node app.js { hello: 'World' }
注意: mod.cpp的源代码来自Addons教程