【问题标题】:Using a slightly older version of GLIBCXX使用稍旧的 GLIBCXX 版本
【发布时间】:2017-12-15 14:05:33
【问题描述】:

背景: 我有运行 nodejs 6.10 的 AWS Lambda。对于我的代码,我需要一个 C 库来运行算法。由 node-gyp 在我的机器上编译。

我的构建服务器是一个过时的 ubuntu 14.04,我在上面运行我的 node-gyp 编译代码,一切都按预期工作。

现在,我已将我的 ubuntu 更新到 17.04 版本。这似乎给了我Version of GLIBCXX的问题

我通过运行收集了不同环境下的GLIBCXX版本

  1. /sbin/ldconfig -p | grep stdc++
  2. (使用 1 中的路径)字符串 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep LIBCXX

在这里您可以看到,在 Ubuntu 17.04 上,GLIBCXX 从 v3.4 到 3.4.22 可用,而其他环境仅支持到 3.4.19。

我在 Ubuntu 17.04 上编译的代码正在寻找 GLIBCXX_3.4.21,它在运行环境中不可用并导致以下错误

"errorMessage": "/var/lang/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /var/task/addon.node)",

请求:是否有任何方法(除了使用自定义泊坞窗/回到旧版本的 ubuntu 等)我可以将编译器设置为使用 GLIBCXX_3.4.19,我最终可以更改环境时(AWS lambda 支持最新版本?)。理想情况下,我正在寻找一个编译器标志,我可以在机器上或通过 node-gyp 永久设置它,以便我使用正确的版本。

观察:即使我有 GLIBCXX_3.4.22,它也只是链接 GLIBCXX_3.4.21(或者它们向后兼容?)

【问题讨论】:

标签: c++ node.js linux ubuntu node-gyp


【解决方案1】:

是否有任何方法(除了使用自定义泊坞窗/回到旧版本的 ubuntu 等)我可以将编译器设置为使用 GLIBCXX_3.4.19,当环境(AWS lambda 支持最新版本?)。理想情况下,我正在寻找一个编译器标志,我可以在机器上或通过 node-gyp 永久设置它,以便我使用正确的版本。

您可以在 Ubuntu 17.04 上安装 earlier version of g++ 并使用该工具链来编译您的软件。 g++-4.7 可以工作,但我不确定。检查当前构建机器上的版本。如果您愿意,您甚至可以将这个较旧的编译器放入容器中,但这不是必需的。

即使我有 GLIBCXX_3.4.22,它也只是链接 GLIBCXX_3.4.21(或者它们向后兼容?)

这些符号的全部意义在于有一种明确定义的方式来指定 ABI 不兼容。您只是碰巧没有使用 GLIBCXX_3.4.22 引入的任何更改,但确实使用了由 GLIBCXX_3.4.22 引入的更改 GLIBCXX_3.4.21(由您使用的任何编译器编译时)。

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 2017-08-23
    • 2022-12-20
    • 2019-11-08
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    相关资源
    最近更新 更多