使用较旧版本的GLIBCXX

时间:2017-07-11 13:18:34

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

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

我的buildserver是一个过时的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
  3. 在这里你可以看到,在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(或者它们是向后兼容的?)

1 个答案:

答案 0 :(得分:0)

  

是否有任何方法(除了使用自定义泊坞窗/返回旧版本的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.21(当您使用的编译器编译时)。