错误:/lib/x86_64-linux-gnu/libm.so.6:版本“ GLIBC_2.27”

时间:2019-02-10 11:46:12

标签: node.js linux compilation glibc node-gyp

我正在为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?)。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您需要部署到与构建环境兼容的操作系统中。通常,这意味着要使用相同的发行版。在某些情况下,也可以在相同发行版的较新版本上进行部署。

您的Ubuntu版本使用glibc 2.27。部署目标使用了更早的版本,大概是Heroku-16Cedar-14,因为您说过要在Heroku上进行部署。您要么必须在匹配的构建环境中重建软件(例如,使用pbuilder或使用虚拟机),要么部署到与您的Ubuntu版本兼容的版本中(大概是Heroku-18 )。