我如何运行node-gyp?

时间:2015-07-31 12:00:25

标签: node.js node-gyp

我点这个链接: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(&ltime);
     return ctime(&ltime);
 }

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之后但是它没有用。

1 个答案:

答案 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,您必须依赖它在模块本身可以安装之前)安装)。