【问题标题】:Error: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27'错误:/lib/x86_64-linux-gnu/libm.so.6:版本“GLIBC_2.27”
【发布时间】:2019-07-04 02:08:50
【问题描述】:

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

任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 有趣。我已经下载了heroku-18 docker 镜像(这是我在 Heroku 上的堆栈),在该堆栈下编译了模块,但仍然出现相同的错误。
    • 引用:“你的部署目标使用了更早的东西,大概是 Heroku-16 或 Cedar-14”——我的部署目标是 heroku-18,而 ldd --version 说有一个 ldd (Ubuntu GLIBC 2.27-3ubuntu1) 2.27跨度>
    • 来自 glibc 2.27 的 libm 肯定有 GLIBC_2.27 符号版本,所以要么 Heroku 映像已损坏,要么您没有使用正确的配置进行部署(因此您最终会得到其他东西)。也许这是 Heroku 客户支持的案例?
    • 看起来 Heroku 映像已损坏,该模块在使用 heroku-16 构建时可以正常工作
    猜你喜欢
    • 2021-09-29
    • 2023-01-17
    • 1970-01-01
    • 2015-07-12
    • 2022-09-27
    • 2022-11-10
    • 2012-11-27
    • 1970-01-01
    • 2019-07-23
    相关资源
    最近更新 更多