【发布时间】: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版本
- /sbin/ldconfig -p | grep stdc++
- (使用 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(或者它们向后兼容?)
【问题讨论】:
-
找到此信息gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths 可帮助您设置 LD 路径,但完全不确定如何将其与 node-gyp 一起使用
-
只使用docker。这是每个人在制作 Linux 发行版二进制文件时都会做的事情。例如,请参阅conda-forge。
标签: c++ node.js linux ubuntu node-gyp