编译错误。堆栈错误: “ make”失败,退出代码2

我目前正在从事一个 nodejs 网络应用程序,我有麻烦推动应用程序与云铸造在线。我对这些错误做了一些研究,看起来可能一些正在安装的软件包有一些冲突。

这是 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>"
}
}

这是我在尝试通过云代工推动应用程序时遇到的错误。在删除 Node _ module文件夹的所有内容后,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

是否有其他人遇到过这个问题,或者知道如何解决它?

166189 次浏览

解决了问题。有些 npm 包没有更新。我修改了 package.json 来安装所有软件包的所有最新版本,并修复了错误。

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

重新启动服务器并在项目文件夹中重新运行 npm 安装

编辑:

Warning: removing ~/.npmrc will delete your other configurations

对于其他碰到这个问题的人:

在我的示例中,在 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)
},

我希望这能帮到别人。

If you are using NVM, you can also change to the version your package supports, like:

nvm install 7.10.2
nvm use 7.10.2

It worked after 删除 package-lock.json and re run npm Install

安装

如果您使用纱线来建立您的程序 删除 yarn.lock和 重新运行 yarn install

这是一个古老而一致的问题,在 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

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

我在安装凉亭 Gzweb 时也遇到了同样的问题。我发现 apt install nodejs按照“/usr/bin/”的方向安装“ node”。您可以通过 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 稳定 安装 npm@6.9.0-g ln -s /usr/local/bin/npm /usr/bin/npm

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

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

你可以测试

npm install -g node-gyp

and

npm install -g node-pre-gyp

最后:

npm install <your module>

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

Ubuntu / Debian:

apt-get install -y build-essential

森托斯:

yum install gcc gcc-c++ make

Fedora 23 and above:

dnf install @development-tools

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

CentOS 6用户

节点10 + 需要 GCC4.9。显然 CentOS 6没有。您可以在 NPM 安装之前使用这些命令作为解决方案(使用 Node11NPM6进行测试)。

yum install devtoolset-7
source scl_source enable devtoolset-7

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

按照以下步骤解决问题。

  • Make sure you have build-tools installed.
  • 更新 node-gyp
  • 删除包-lock. json 和节点模块文件夹,再次运行 npm install。
  • 删除 ~/. node-gyp 文件夹并重新运行 npm install。

资料来源: https://codeforgeek.com/make-failed-with-exit-code-2/

我正在做 Ubuntu 20.04。我试了这里提到的所有解决方案,都没有效果。实际问题是版本差异。我确信同样的 package.json将在你队友的本地机器上工作得很好。您只需询问您的团队成员正在使用的 npm 和节点版本,并将其安装到本地计算机上。

要安装特定版本的 npm:

sudo npm install -g npm@specific_npm_version_here

安装特定版本的节点:

sudo npm install -g n
sudo n specify_node_version_here

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

由于我的 Dockerfile 没有指定版本,所以使用了最新的版本,即3天前在 DockerHub 上发布的 Node16。

将其降级为15(node:15-alpine)解决了这个问题。

如果您在2021年12月16日之后阅读本文,您可能会看到由于 Heroku 节点版本升级问题而导致的构建错误。

As per the Heroku changelog:

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

Applications using the heroku/ruby buildpack that do not have a 由另一个构建包安装的 Node 版本(例如 Heroku/nodejs buildpack)现在将收到:

节点版本16.13.1(以前是12.16.2)纱线版本1.22.17 (以前为1.22.4)

Https://devcenter.heroku.com/changelog-items/2306

🥴

In my case, it was cased by node-sass(version < 6.0.1) not supporting Node 16. Update node-sass to 6.0.1 and the issue is solved. see 错误: 在名称空间中没有名为 delete _ cv _ t 的模板,您是指这个名称空间吗?.

根据我的经验,您应该非常仔细地阅读错误消息并搜索“根本原因消息”。对我来说是 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线上方。

我也有同样的错误,对我来说,解决方案是降级节点版本。

在 Linux 中,它是通过安装必要的构建来修复的 sudo apt-get install build-essential 而是在我的 Windows wsl2里 只安装必要的构建并没有解决问题, 我必须把节点降级到16.15.0然后就解决了。

将 Node 版本从16.15.1更改为14.17.3

 sudo n 14.17.3

有时,项目依赖于较旧的节点版本。向所有者询问合适的版本,或者使用‘ nvm install 尝试一下