我对允许在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%完美地工作......
答案 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
中的您的二进制文件。