AWS Lambda部署Node.js项目遇GLIBCXX_3.4.21缺失错误求助
解决AWS Lambda Node.js 6.10中GLIBCXX_3.4.21缺失的错误
这个错误的核心原因很明确:你在Ubuntu 16.04环境下编译的scrypt模块(smartethereumwallet的依赖)依赖了较高版本的GLIBCXX库,但AWS Lambda的Node.js 6.10运行环境基于Amazon Linux 1,其系统库版本比Ubuntu 16.04要旧,导致无法找到GLIBCXX_3.4.21。
下面是两种可行的解决办法,按推荐优先级排序:
方法一:在Lambda兼容环境中重新编译依赖
这是最可靠的方案,因为我们会在和Lambda完全一致的系统环境中安装和编译模块:
使用Docker拉取Amazon Linux 1镜像
打开终端执行:docker pull amazonlinux:1启动容器并挂载你的项目目录
把/path/to/your/project替换成你本地项目的实际路径:docker run -v /path/to/your/project:/var/task -it amazonlinux:1 /bin/bash在容器内安装Node.js 6.10及编译工具
依次执行以下命令:# 安装编译依赖 yum install -y gcc-c++ make openssl-devel # 下载Node.js 6.10安装包 curl -O https://nodejs.org/dist/v6.10.0/node-v6.10.0-linux-x64.tar.gz # 解压并配置环境变量 tar -xzf node-v6.10.0-linux-x64.tar.gz export PATH=/node-v6.10.0-linux-x64/bin:$PATH重新安装项目依赖
先清理本地的旧依赖文件,再重新安装:cd /var/task rm -rf node_modules package-lock.json npm install --save smartethereumwallet打包并上传到Lambda
退出容器后,将项目目录重新打包成zip文件,上传到AWS Lambda即可。
方法二:升级Lambda的Node.js版本(推荐长期方案)
Node.js 6.10已经是非常老旧的版本(早已停止维护),不仅库版本落后,还存在安全风险。如果你的业务允许,建议将Lambda的运行时版本升级到Node.js 14.x或更高版本(比如18.x)。新版本的Lambda运行环境基于Amazon Linux 2,系统库版本更丰富,大概率能直接兼容你在Ubuntu 16.04下编译的依赖,同时也能获得更好的性能和安全性。
注意事项
- 不要在本地Ubuntu环境直接安装依赖后打包上传,不同系统的库版本差异会导致这类兼容性问题。
- 如果选择升级Node.js版本,需要确认
smartethereumwallet库是否兼容新版本的Node.js。
内容的提问来源于stack exchange,提问作者Cheshta S
相关产品推荐
相关产品推荐

