我点这个链接:http://www.swig.org/Doc3.0/Javascript.html#Javascript_running_swig 使nodejs扩展。所以我创建了一个包含example.c
的文件夹测试 #include <time.h>
double My_variable = 3.0;
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}
int my_mod(int x, int y) {
return (x%y);
}
char *get_time()
{
time_t ltime;
time(<ime);
return ctime(<ime);
}
example.i:
%module example
%{
/* Put header files here or function declarations like below */
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
%}
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
binding.gyp:
{
"targets": [
{
"target_name": "example",
"sources": [ "example.cxx", "example_wrap.cxx" ]
}
]
}
我运行此命令:
sudo npm install -g node-gyp
然后:
swig -javascript -node -c++ example.i
然后:
node-gyp configure
当我运行node-gyp build时,我遇到了这些错误:
gyp info it worked if it ends with ok
gyp info using node-gyp@2.0.2
gyp info using node@0.12.7 | linux | ia32
gyp info spawn make
gyp infomake: Entering directory `/home/slim/test/build'
make: *** No rule to make target `Release/obj.target/example/example.o', needed by `Release/obj.target/example.node'. Stop.
make: Leaving directory `/home/slim/test/build'
spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/lib/node_modules/node-gyp/lib/build.js:269:23)
gyp ERR! stack at ChildProcess.emit (events.js:110:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:1074:12)
gyp ERR! System Linux 3.13.0-32-generic
gyp ERR! command "node" "/usr/bin/node-gyp" "build"
gyp ERR! cwd /home/slim/test
gyp ERR! node -v v0.12.7
gyp ERR! node-gyp -v v2.0.2
gyp ERR! not ok
我在这个主题中发现了很多帖子,但它对我不起作用,我运行npm -g install node-gyp并在运行node-gyp-build之后但是它没有用。
答案 0 :(得分:2)
binding.gyp
指的是两个源文件:
"sources": [ "example.cxx", "example_wrap.cxx" ]
example_wrap.cxx
由Swig生成,另一个包含您的代码。您似乎已将该文件命名为example.c
,因此node-gyp
无法找到它。解决方案:将example.c
重命名为example.cxx
。
由于您正在使用Node 0.12,因此接下来可能会遇到一堆复杂错误。如果是,请在您的编辑器中打开example_wrap.cxx
,搜索SWIG_V8_VERSION
并将定义替换为:
#define SWIG_V8_VERSION 0x032873
您可以查看nan
而不是Swig,这是创建Node.js插件的另一种方法。它运作良好(我有经验)并且有很多可用的示例代码(node-native-boilerplate
是一个好的开始)。分发使用nan
构建的插件也更容易,因为所有依赖项都是在常规npm install
进程中安装的(而对于Swig,您必须依赖它在模块本身可以安装之前)安装)。