Lambda是否允许libstdc ++。so.6? AWS lambda是否有GCC-8.0.1?

时间:2018-06-14 03:23:18

标签: amazon-web-services docker gcc amazon-s3 aws-lambda

我对允许在AWS Cloud上运行的文件有疑问。

我有一个包含c ++文件但使用python-wrappers的项目。因此,该项目具有.py和.cpp文件。

现在,问题归结为我尝试将此项目部署到云上时。我能够做到但由于依赖性而导致GLIBSTD错误:(无法导入模块'handler':/usr/lib64/libstdc++.so.6:未找到版本`GLIBCXX_3.4.20'(/ var需要) /task/lgraph.cpython-36m-x86_64-linux-gnu.so)

这个项目是在我的ArchLinux机器上构建的,我检查了哪些依赖项是一个问题,它是libstdc ++。so.6,如下所示。

server1:〜$ / sbin / ldconfig -p | grep stdc ++

libstdc++.so.6 (libc6,x86-64) => /usr/lib/libstdc++.so.6
libstdc++.so.6 (libc6) => /usr/lib32/libstdc++.so.6
libstdc++.so.5 (libc6) => /usr/lib32/libstdc++.so.5
libstdc++.so (libc6,x86-64) => /usr/lib/libstdc++.so
libstdc++.so (libc6) => /usr/lib32/libstdc++.so

TL:DR:AWS Lambda还没有gcc-8.0.1吗?它无法理解如何编译吗?

我问的是gcc-8.0.1。是因为我去了docker并部署了这个项目,我得到了同样的GLIB错误,所以我手动安装了gcc-8.0.1。在docker容器上,程序100%完美地工作......

1 个答案:

答案 0 :(得分:0)

有点晚,但是如果您有libstdc ++。so.6文件,则可以将其包含在lambda层中并进行部署。

在压缩之前,必须将.so文件放入lib/文件夹中,然后将zip作为lambda层上传。然后将该层绑定到该函数,它应该可以工作。

TL; DR

Lambda层只是zip文件,它们已解压缩到lambda函数的opt/目录中。 opt/目录是特殊的,因为opt/bin在$ PATH中,而opt/lib在$ LD_LIBRARY_PATH中。

因此,如果将libstdc ++。so.6之类的预构建库文件放入lambda层的lib/文件夹中,则可以从正在运行的lambda函数中引用它。您可能还必须将二进制文件放在bin/文件夹中,以确保一切正常。但是要注意,当前lambda中的$ PATH优先考虑opt/bin文件夹之前的其他目录,因此,如果二进制文件已存在于lambda中,它将使用默认版本而不是您图层中的版本。您需要修改$ PATH以确保使用了来自您图层的/opt/bin中的您的二进制文件。