我正在使用Eclipse CDT在C ++中编写一个简单的node.js插件。该项目有很多文件,我想使用Eclipse的托管构建系统。
我可以使用node-waf
编译一个简单的插件示例,但我无法配置我的Eclipse工具链来构建一个没有waf的合适的共享库。 Waf在幕后使用gcc,所以我确信它是可能的。
我应该链接哪些库以及我应该传递哪种选项才能使其正常工作?
目前,如果我尝试require
我的lib:
SyntaxError: Unexpected token ILLEGAL
答案 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的源代码