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是否有可比性,或者以跨平台的方式重写该部分代码。