相关文章推荐
酷酷的鸵鸟  ·  MiniExcel-master.zip_m ...·  1 年前    · 
鬼畜的面包  ·  How to use MDC ...·  1 年前    · 

GYP ERR!构建错误。堆栈错误:'make'失败,退出代码2

99 人关注

我目前正在开发一个nodejs网络应用程序,我在用cloud foundry在线推送该程序时遇到了麻烦。我对这些错误做了一些研究,看起来可能是正在安装的一些软件包有一些冲突。

这是package.json文件。

"dependencies" : { "c3" : "^0.4.12" , "cfenv" : "1.0.0" , "cloudant" : "^1.8.0" , "dygraphs" : "^2.0.0" , "express" : "4.5.1" , "getmac" : "1.0.6" , "http" : "0.0.0" , "mqtt" : "1.0.5" , "properties" : "1.2.1" , "save" : "^2.3.0" , "sockjs" : "0.3.9" , "websocket-multiplex" : "0.1.x" "description" : "description." , "license" : "UNLICENSED" , "main" : "app.js" , "repository" : { "type" : "git" , "url" : "<gitUrl>"

这是我在尝试通过cloud foundry推送应用时遇到的错误。当我在删除 node_modules 文件夹的所有内容后进行npm安装时,这个类似的错误也会发生。

../src/bufferutil.cc:32:50: error: call of overloaded 'NODE_SET_METHOD(v8::Local<v8::FunctionTemplate>&, const char [6], void (&)(const v8::FunctionCallbackInfo<v8::Value>&))' is ambiguous
     NODE_SET_METHOD(t, "merge", BufferUtil::Merge);
../src/bufferutil.cc:32:50: note: candidates are:
In file included from ../src/bufferutil.cc:8:0:
/root/.node-gyp/8.0.0/include/node/node.h:257:13: note: void node::NODE_SET_METHOD(v8::Local<v8::Template>, const char*, v8::FunctionCallback)
 inline void NODE_SET_METHOD(v8::Local<v8::Template> recv,
/root/.node-gyp/8.0.0/include/node/node.h:270:13: note: void node::NODE_SET_METHOD(v8::Local<v8::Object>, const char*, v8::FunctionCallback)
 inline void NODE_SET_METHOD(v8::Local<v8::Object> recv,
bufferutil.target.mk:95: recipe for target 'Release/obj.target/bufferutil/src/bufferutil.o' failed
make: *** [Release/obj.target/bufferutil/src/bufferutil.o] Error 1
make: Leaving directory '/home/WibiSmart-Bluemix-App/node_modules/bufferutil/build'
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/npm/node_modules/node-gyp/lib/build.js:285:23)
gyp ERR! stack     at emitTwo (events.js:125:13)
gyp ERR! stack     at ChildProcess.emit (events.js:213:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:197:12)
gyp ERR! System Linux 4.4.30-ti-r64
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/WibiSmart-Bluemix-App/node_modules/bufferutil
gyp ERR! node -v v8.0.0
gyp ERR! node-gyp -v v3.6.1
gyp ERR! not ok

有没有人遇到过这个问题,或者知道如何解决这个问题?

6 个评论
每当你遇到这样的错误时, 实际的 错误会出现 你目前 在控制台 发布的这些行 之前
@mscdex 我在错误前加入了我所得到的几行代码
切换到node v6有帮助吗?
@opiethehokie 这样做的命令会是什么?在我看来, bufferutil 经常出现,有人知道那是什么吗?
你的编译器和编译器版本是什么?
对于Mac OS Catalina,降级到Node 10.x解决了我的问题。
node.js
npm
ibm-cloud
cloud-foundry
gyp
Michael Vaquier
Michael Vaquier
发布于 2017-06-02
15 个回答
NuOne
NuOne
发布于 2022-01-08
0 人赞同

删除 package-lock.json 并重新运行 npm install 后,它成功了。

如果你使用yarn来构建你的程序,请 删除 yarn.lock ,然后 重新运行 yarn install

我讨厌这样的解决方案
这对我很有用。在我的例子中,是 yarn.lock 文件,我不得不删除。
是的......如果你用yarn而不是npm来构建。我会更新我的答案,谢谢。
John
npm upgrade应该将所有软件包更新到最新版本。见 docs.npmjs.com/cli/v7/commands/npm-update npmjs.com/package/npm-upgrade
Michael Vaquier
Michael Vaquier
发布于 2022-01-08
已采纳
0 人赞同

找到了问题所在。一些npm包没有更新。我修改了package.json,安装了所有包的最新版本,错误就解决了。

如何做到这一点?
是的,如何检查库的同行依赖关系并安全地更新?
你可以试试yarn-check软件包,它非常有用。
Slartibartfast
Slartibartfast
发布于 2022-01-08
0 人赞同

这已经是一个老问题了,但却一直都有记录,网址是 :https://github.com/nodejs/node-gyp/issues/809

对我来说,这个错误提到了版本号,比如。

gyp ERR! System Darwin 17.7.0
gyp ERR! node -v v12.1.0
gyp ERR! node-gyp -v v3.8.0

在尝试了所有可能的解决方案组合(修改~/.npmrc,删除~/.node-gyp,清除npm缓存,删除node_modules,甚至重启系统)后,对我有效的是降级节点。

我相信日志中提到的nodenode-gyp的版本是不兼容的。因此,我恢复到一个较早的节点版本,它像一个魅力一样工作。

npm install -g node@11.10.0

应该有一个明确的文件来描述两者之间的突破性变化和兼容性问题。

这就是我找了3天的答案虽然我是在Docker容器中遇到的问题(而不是在主机上),但听起来我确实和你走过同样的路--试图重新安装节点,清除缓存等等。 对我来说,基于 node:current-alpine 的容器是个错误(在写这篇文章的时候是16版)。 改为 node:12.2.0-alpine 修复了我的问题,并允许 npm install 完成。我怀疑我的解决方案的根本原因与你的相同 -- 旧的Docker容器本质上是降低了node的版本。
如何检查一个特定版本的 node-gyp 是否与一个特定版本的 node 兼容?
Jie
这对我来说是可行的。答案的其他资源:(1) stackoverflow.com/questions/47008159/ ... (2) nodejs.org/en/download/releases
piscator
piscator
发布于 2022-01-08
0 人赞同

在我们的案例中(因为 make 失败),这个问题可以通过 安装构建/开发工具 来解决。

Ubuntu / Debian。

apt-get install -y build-essential

CentOS。

yum install gcc gcc-c++ make 

Fedora 23及以上版本。

dnf install @development-tools

如果这不是解决方案,你可能想尝试升级或降级node,删除package-lock.jsonnode_modules文件夹,然后重新运行npm install

John
如何在mac上做到这一点?
John
现在我正在尝试这个。我不是一个自制或Ruby的超级粉丝,但如果它能工作.... docs.macstadium.com/docs/install-osx-build-tools
John
Xcode已经安装。我运行在MacOS 11.4上 - 我想知道我是否会被迫更新系统,然后才能继续解决这个问题。不幸的是,我的互联网是垃圾,它是一个8GB的下载 - 它总是在下载一两GB时失败,然后想从头再来。知道这是否是使其工作的关键吗?
@John 我不期望你需要更新macOS。你是否也安装了Xcode的命令行工具?
Ian Ellis
Ian Ellis
发布于 2022-01-08
0 人赞同

对于其他偶然遇到这个确切问题的人。

在我的例子中,服务器节点的版本在我的package.json文件中被设置为比我本地环境运行的版本更早的版本。 所以要检查你在本地运行的是什么。

node --version
-> 8.11.3

然后看看你的package.json中的服务器设置。

"name": "myapp", "version": "0.0.0", "private": true, "engines": { "node": "7.10.2" // <-- This is too old, set it to the node version you are running locally (8.11.3)

我希望这能帮助别人。

这为我解决了问题。从Node 10降级到Node 8,让我的 repo 在本地运行。
John
我没有类似 "engines": { "node": "7.10.2"locally (8.11.3) }, 的东西 。{ "node":"7.10.2 "本地(8.11.3)}, 在我的package.json中。我不知道它认为自己是哪个版本的Node。
andromeda
andromeda
发布于 2022-01-08
0 人赞同

删除~/.node-gyp文件夹,然后删除~/.npmrc文件。

重新启动你的服务器,在你的项目文件夹中重新运行npm安装。

警告:删除~/.npmrc将删除你的其他配置。

警告:删除 ~/.npmrc 将删除你的其他配置,例如你的默认作者名字。
Chris.Zou
Chris.Zou
发布于 2022-01-08
0 人赞同

在我的例子中,是由于node-sass(版本<6.0.1)不支持Node 16。更新node-sass到6.0.1,问题就解决了。见 错误:在命名空间'std'中没有名为'remove_cv_t'的模板;你是说'remove_cv'吗?

我的一个经验是,你应该非常仔细地阅读错误信息并搜索 "根本原因信息"。在我的例子中,它是 error: no template named 'remove_cv_t' in namespace 'std'; did you mean 'remove_cv'? 它显示在 GYP ERR! build error. stack Error: 'make' failed with exit code 2 的正上方 !构建错误。堆栈错误:'make'失败,退出代码2 行。

mohammad javad ahmadi
mohammad javad ahmadi
发布于 2022-01-08
0 人赞同

我认为删除这个目录并清理 npm 的缓存会更好。

rm -rf ~/.node-gyp/
rm -r node_modules/.bin/;
rm -r build/
npm cache clean

而且你可以测试

npm install -g node-gyp
npm install -g node-pre-gyp
npm install <your module>
Иван Бишевац
Иван Бишевац
发布于 2022-01-08
0 人赞同

我在建立基于 node:alipine 的图像时遇到了这个问题。

由于我的Docker文件没有指定版本,所以使用了最新的版本,也就是3天前在Docker Hub发布的Node 16。

把它降级到15 node:15-alpine )就解决了这个问题。

Robinson Marquez
Robinson Marquez
发布于 2022-01-08
0 人赞同

如果你使用的是 NVM ,你也可以改成你的软件包支持的版本,比如。

nvm install 7.10.2
nvm use 7.10.2
HAOBO LUO
HAOBO LUO
发布于 2022-01-08
0 人赞同

我在安装 gazebo gzweb 的时候也遇到了同样的问题。我发现 apt install nodejs 把 "node "安装在"/usr/bin/"方向。你可以通过 which node 来验证。但 node -v 仍然是指"/usr/local/bin/node",这是一个错误的版本,我没能卸载。 因此,作为我的解决方案。

rm -rf /usr/local/bin/node
cp -i /usr/bin/node /usr/local/bin/
cp -i /usr/bin/nodejs /usr/local/bin/

sudo apt-get install npm npm install -g n n stable npm install npm@6.9.0 -g ln -s /usr/local/bin/npm /usr/bin/npm

Taylan
Taylan
发布于 2022-01-08
0 人赞同

CentOS 6用户

Node 10+需要GCC4.9。而显然CentOS 6没有这个功能。你可以在npm安装前使用这些命令作为一种变通方法(用Node 11 NPM 6测试)。

yum install devtoolset-7
source scl_source enable devtoolset-7

来源:https://github.com/lovell/sharp/issues/1283

kheengz
kheengz
发布于 2022-01-08
0 人赞同

按照这些步骤来解决这个问题。

  • 请确保你已经安装了build-tools。
  • 更新node-gyp
  • 删除package-lock.json和node modules文件夹,再次运行npm install。
  • 删除~/.node-gyp文件夹并再次运行npm安装。
  • 来源 :https://codeforgeek.com/make-failed-with-exit-code-2/

    Saket Suraj
    Saket Suraj
    发布于 2022-01-08
    0 人赞同

    我在Ubuntu 20.04上工作。我尝试了这里提到的所有解决方案,但没有任何效果。实际的问题是版本的差异。我相信同样的 package.json 在你的一个队友的本地机器上也能正常工作。你只需要向你的队友询问他们所使用的npm和node版本,然后在你的本地机器上安装它。

    要安装特定版本的npm。

    sudo npm install -g npm@specific_npm_version_here
    

    要安装特定版本的节点。

    sudo npm install -g n
    sudo n specify_node_version_here
    
    请不要对多个问题发布相同的答案。它们会被标记为删除,如果多个问题有相同的答案,你应该考虑将这些问题标记为重复的,而不是重复你的答案。
    @DavidBuck 谢谢你指出这一点。我没有意识到这一点。动机是为了提供正确的解决方案。
    理解了。 这个答案 有一些有用的建议。
    Caleb
    Caleb
    发布于 2022-01-08
    0 人赞同

    如果你在2021年12月16日之后读到这篇文章,你可能已经看到由于Heroku节点版本升级问题导致的构建错误。

    根据Heroku的更新日志。

    Ruby应用程序现在默认使用Node 16.13.1版本和Yarn 1.22.17版本 更改于2021年12月16日生效

    使用heroku/ruby构建包的应用程序,如果没有由其他构建包安装的 版本的应用程序,如果没有通过其他构建包(例如 heroku/nodejs buildpack)的应用程序现在会收到。