C++ 使用稍旧版本的GLIBCXX
背景: 我让AWS Lambda运行nodejs 6.10。对于我的代码,我需要一个C库来运行算法。这是在我的机器上由节点gyp编译的 我的buildserver是一个过时的Ubuntu14.04,我在上面运行我的NodeGYP编译代码,一切都按预期运行 现在,我已经将我的ubuntu更新到了17.04版本。这似乎给我带来了一些问题 我通过运行C++ 使用稍旧版本的GLIBCXX,c++,node.js,linux,ubuntu,node-gyp,C++,Node.js,Linux,Ubuntu,Node Gyp,背景: 我让AWS Lambda运行nodejs 6.10。对于我的代码,我需要一个C库来运行算法。这是在我的机器上由节点gyp编译的 我的buildserver是一个过时的Ubuntu14.04,我在上面运行我的NodeGYP编译代码,一切都按预期运行 现在,我已经将我的ubuntu更新到了17.04版本。这似乎给我带来了一些问题 我通过运行 /sbin/ldconfig-p | grep stdc++ (使用1中的路径)strings/usr/lib/x86_64-linux-gnu/lib
"errorMessage": "/var/lang/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /var/task/addon.node)",
请求:是否有任何方法(除了使用自定义dockers/返回到较旧版本的ubuntu等)可以将编译器设置为使用GLIBCXX_3.4.19,当环境(AWS lambda支持最新版本)出现时,我最终可以更改该编译器。理想情况下,我正在寻找一个编译器标志,可以在机器上永久设置,也可以通过节点gyp传递,以便使用正确的版本
观察:尽管我有GLIBCXX_3.4.22,但它只是链接GLIBCXX_3.4.21(或者它们是向后兼容的?)
是否有任何方法(除了使用自定义dockers/返回ubuntu的旧版本等)可以将编译器设置为使用GLIBCXX_3.4.19,当环境(AWS lambda支持最新版本)出现时,我最终可以更改该编译器。理想情况下,我正在寻找一个编译器标志,可以在机器上永久设置,也可以通过节点gyp传递,以便使用正确的版本
你可以在Ubuntu17.04上安装一个工具,并使用这个工具链来编译你的软件。g++-4.7可以工作,但我不确定。检查当前生成计算机上的版本。如果愿意,您甚至可以将这个较旧的编译器装入容器中,但这不是必需的
尽管我有GLIBCXX_3.4.22,但它只是链接GLIBCXX_3.4.21(或者它们是向后兼容的?)
这些符号的全部要点是有一个明确的方式来指定ABI不兼容。您只是碰巧没有使用GLIBCXX_3.4.22引入的任何更改,而是使用了GLIBCXX_3.4.22引入的更改
GLIBCXX_3.4.21(当由您使用的任何编译器编译时)。相关帖子:相关帖子:找到了帮助您设置LD path的信息,但完全不确定如何与节点Gyp一起使用,只需使用docker即可。这是每个人在制作Linux发行版二进制文件时所做的。例如,请参见。