使用node-gyp构建node.js插件时出错

时间:2015-02-07 15:58:06

标签: node.js node-gyp

我正在构建一个非常简单的node.js插件,只打印出字符串“Hello”。当我使用“node-gyp build”构建它时,我收到一个错误:

gyp info it worked if it ends with ok
gyp info using node-gyp@1.0.2
gyp info using node@0.10.35 | darwin | x64
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
  CXX(target) Release/obj.target/hello/hello.o
  SOLINK_MODULE(target) Release/hello.node
clang: error: no such file or directory: '“-L/opt/local/lib”'  
make: *** [Release/hello.node] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack     at ChildProcess.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:820:12)
gyp ERR! System Darwin 13.4.0
gyp ERR! command "node" "/usr/local/bin/node-gyp" "build"
gyp ERR! cwd /Users/Kevin/Development/node/sampleaddon
gyp ERR! node -v v0.10.35
gyp ERR! node-gyp -v v1.0.2
gyp ERR! not ok 

首先,我去检查/ opt / local / lib是否存在。它确实如此,并且它充满了文件。我认为它可能是一个权限问题,所以我运行“sudo node-gyp build”。这很好用,插件构建没有错误。

所以看起来它与权限相关。所以我看一下权限:

Chipmunk:sampleaddon Kevin$ ls -l /opt/local
total 8
drwxr-xr-x    3 root  wheel    102 Feb  2  2014 Library
drwxr-xr-x  344 root  admin  11696 Mar 13  2014 bin
drwxr-xr-x    7 root  admin    238 Feb  2  2014 etc
drwxr-xr-x   70 root  admin   2380 Mar 13  2014 include
drwxr-xr-x  240 root  admin   8160 Mar 13  2014 lib
drwxr-xr-x    7 root  admin    238 Feb  2  2014 libexec
lrwxr-xr-x    1 root  admin      9 Feb  2  2014 man -> share/man
drwxr-xr-x    9 root  admin    306 Feb  2  2014 sbin
drwxr-xr-x   26 root  admin    884 Feb  2  2014 share
drwxr-xr-x    3 root  admin    102 Oct 25  2013 var

每个人都有对/ opt / local / lib的读取权限,所以我不明白这里的问题是什么。我想构建节点插件而不必以root身份构建它们。

我用-g选项安装了node-gyp,但这是安装它的常规方法。

有谁知道问题是什么?

编辑:这是binding.gyp文件。

{
    "targets" : [
        {
            "target_name" : "hello",
            "sources" : [ "hello.cpp" ]           
        }
    ]
}

这是我运行“sudo node-gyp build”时的样子:

Chipmunk:sampleaddon Kevin$ sudo node-gyp build
gyp info it worked if it ends with ok
gyp info using node-gyp@1.0.2
gyp info using node@0.10.35 | darwin | x64
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
  CXX(target) Release/obj.target/hello/hello.o
  SOLINK_MODULE(target) Release/hello.node
  SOLINK_MODULE(target) Release/hello.node: Finished
gyp info ok 

我不知道它是否有所作为,但我使用的是OS X 10.9.5。

1 个答案:

答案 0 :(得分:0)

我发现了问题所在。 node-gyp遇到问题的“-L / opt / local / lib”来自LDFLAGS环境变量。此环境变量由macports添加。出于某种原因,node-gyp无法处理报价。我在我的主目录中编辑了.bash_profile文件,并从LDFLAGS中的-L / opt / local / lib周围删除了引用。

这很有用,我能够编译node.js插件。我不知道为什么报价引起了这个问题。如果在链接路径中不允许引用,我不知道如何指定其中包含空格的链接目录。如果有人知道如何在目录名中有一个带有空格的node-gyp链接路径,请告诉我。