C++ Node gyp无法编译nodejs扩展名(';致命错误,未找到线程';文件)

C++ Node gyp无法编译nodejs扩展名(';致命错误,未找到线程';文件),c++,node.js,gcc,node-gyp,C++,Node.js,Gcc,Node Gyp,我的一位同事制作了这个节点扩展,我正试图通过节点gyp配置(一切正常)和节点gyp构建(致命错误,'线程'文件未找到)来编译它。现在,我认为这是gcc的一个问题,我在某个地方读到了我需要的标志-stdlib=libc++。我的binding.gyp文件如下所示: { "targets": [ { "target_name": "overcpu", "sources": [ "overcpu.cpp" ], "cflags" : [

我的一位同事制作了这个节点扩展,我正试图通过
节点gyp配置
(一切正常)和
节点gyp构建
致命错误,'线程'文件未找到
)来编译它。现在,我认为这是gcc的一个问题,我在某个地方读到了我需要的标志
-stdlib=libc++
。我的
binding.gyp
文件如下所示:

{
    "targets": [
    {
        "target_name": "overcpu",
        "sources": [ "overcpu.cpp" ],
        "cflags" : [ "-stdlib=libc++" ]
    }
    ]
}
但我仍然得到了错误。我安装了XCode和开发工具,而且我通过
brew
安装了
gcc
。不幸的是,我一直收到相同的错误。 通过执行
gcc-v
我得到以下输出:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix
我的
gcc
有什么问题吗,或者是
node gyp
(v1.0.1)让我发疯了


非常感谢

您还需要将
-std=c++11
添加到
cflags
参数列表中,以便完全激活c++11支持

更新:对于OSX(特别是
cflags
应该可以在BSD和Linux上工作),您还需要在
目标中添加一个条件,如下所示:

{
    "targets": [
    {
        "target_name": "overcpu",
        "sources": [ "overcpu.cpp" ],
        "cflags" : [ "-std=c++1", "-stdlib=libc++" ],
        "conditions": [
          [ 'OS!="win"', {
            "cflags+": [ "-std=c++11" ],
            "cflags_c+": [ "-std=c++11" ],
            "cflags_cc+": [ "-std=c++11" ],
          }],
          [ 'OS=="mac"', {
            "xcode_settings": {
              "OTHER_CPLUSPLUSFLAGS" : [ "-std=c++11", "-stdlib=libc++" ],
              "OTHER_LDFLAGS": [ "-stdlib=libc++" ],
              "MACOSX_DEPLOYMENT_TARGET": "10.7"
            },
          }],
        ],
    }
    ]
}

如果您在插件的目录中执行
node gyp--loglevel=dully rebuild
,您是否看到编译/链接期间在命令行上设置了
cflags
?您好,有很多日志,但我看不到在任何地方设置了
cflags
。你能告诉我这是在哪里发生的吗?也许我错过了。谢谢你修改了答案。现在线程错误似乎消失了,但我得到了一个致命错误:'linux/unistd.h'文件未找到
。我猜一些标志又丢失了?听起来代码可能不是跨平台的?无论如何,您应该可以将代码中的
linux/unistd.h
更改为
unistd.h
。因此,编译说我在外部定义的uu NR_getid有问题。定义它时(
#if defined(OS_MACOSX)
bla bla
#endif
),编译工作正常,但从节点调用扩展时会出现“错误的系统调用:12”错误:-(也许我需要另一个标志来定义缺少的变量?OSX上没有
gettid
,因此如果您有需要它的代码,您必须找到OSX是否有可比性,或者以跨平台的方式重写该部分代码。