Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用稍旧版本的GLIBCXX_C++_Node.js_Linux_Ubuntu_Node Gyp - Fatal编程技术网

C++ 使用稍旧版本的GLIBCXX

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

背景: 我让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/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)",
    
    请求:是否有任何方法(除了使用自定义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发行版二进制文件时所做的。例如,请参见。