错误:/lib/x86
我建立既适用于Mac(10.9+)和Linux(Ubuntu的18)我的节点模块(以N-API)。当我部署我的模块,以远程机器(到Heroku的),我得到:
Error: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by /opt/atlassian/pipelines/agent/build/addons/Release-linux/module.node)
at Object.Module._extensions..node (internal/modules/cjs/loader.js:717:18)
at Module.load (internal/modules/cjs/loader.js:598:32)
at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
(...)
在两台机器上运行ldd --version
:
~ $ ldd --version
ldd (Ubuntu GLIBC 2.27-3ubuntu1) 2.27
和:
~ $ ls /lib/x86_64-linux-gnu/
libm.so.6 (...)
另外,我,我不知道为什么链接到libm
是必要的,因为我不使用#include <math.h>
我的代码中(编译器暗中加入libm
?)。
任何帮助,将不胜感激。
回答如下:你需要部署到操作系统与您的构建环境兼容。通常情况下,这意味着要使用相同的发行版。在某些情况下,还可以对相同的分布较新版本的部署。
你的Ubuntu的版本使用的glibc 2.27。您的部署目标使用较早的东西,想必无论是Heroku-16或Cedar-14,既然你说你想在Heroku上部署。要么你有一个匹配的编译环境重建你的软件(例如,使用pbuilder
,或者使用虚拟机),或部署到的东西,是你的Ubuntu(据推测,Heroku-18)的版本兼容。