AWS 上的 GLIBCXX 版本错误

GLIBCXX version error on AWS

本文关键字:错误 版本 GLIBCXX 上的 AWS      更新时间:2023-10-16

这是对之前在这里提出的问题的扩展:libstdc++ GLIBCXX 版本错误

我有一个在本地运行良好的 Node.js 应用程序 (Ubuntu 16.04),但是当我将捆绑包上传到 AWS Elastic Beanstalk 时,我收到与我的 DLL 相关的错误。该应用程序使用 ffi 节点模块以 DLL (.so) 的形式调用C++函数。当应用程序在 AWS 上运行时,我收到 GLIBCXX 版本错误,导致动态链接调用失败。

虽然关于先前问题的帖子建议使用静态链接而不是动态链接,但这对我来说不是一个选择,因为C++附加组件必须是 dll。那么看来我需要编译我的 dll,使其使用早期版本的 GLIBCXX。

那么我的问题是:

  1. 如何知道我的 AWS 实例上运行的是哪个版本的 GLIBCXX?
  2. 如何编译我的 dll 以使用早期版本的 GLIBCXX?
  3. 无论如何都可以在AWS实例本身上解决这些问题(即不需要将dll重新编译为早期版本的GLIBCXX)

作为参考,这是我得到的确切错误:

错误:

动态链接错误:/usr/lib64/libstdc++.so.6:版本 未找到"GLIBCXX_3.4.20"(需要 Code/C++/mathreco/TRUNK/src/lib/libsmath.so) 在新的动态库 (/var/app/current/node_modules/ffi/lib/dynamic_library.js:74:11)

在这里找到答案:如何修复:/usr/lib/libstdc++.so.6:未找到版本"GLIBCXX_3.4.15">

使用 -static-libstdc++ gcc 选项静态链接到 libstdc++。

出于某种原因,我认为我不能静态链接libstc++,因为我的库是动态链接的。很高兴它成功了!