背景: 我有AWS Lambda运行nodejs 6.10。对于我的代码,我需要一个C库来运行算法。这是由我的机器上的 node-gyp 编译的。
我的buildserver是一个过时的ubuntu 14.04,我正在运行我的node-gyp编译代码,一切都按预期工作。
现在,我已将我的ubuntu更新为17.04版本。这似乎给了我Version of GLIBCXX
的问题我已经通过运行
收集了不同环境中的GLIBCXX版本在这里你可以看到,在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(或者它们是向后兼容的?)
答案 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(当您使用的编译器编译时)。