【发布时间】:2019-07-08 20:59:01
【问题描述】:
我正在尝试让 XPDF 的 pdftohtml 的 Lambda 快乐版本工作,但没有运气。
到目前为止,已经尝试了以下方法:
- 已创建运行最新 amazonlinux 映像的 Docker 容器
- 我已将源代码复制到此容器中并运行:
yum 安装 cmake、gcc、gcc-c++、freetype-devel
- 使用 cmake 编译代码会生成一个二进制文件,该二进制文件可以在容器中完美执行,该容器应该与 Lambda 具有相同的操作系统和环境。
- 我已在容器中验证 libc.so.6 的版本为 2.26。
- 我已将其复制到我的 AWS zip 文件夹中,并将以下依赖项包含在准备上传的 lib 文件夹中:
libfreetype.so.6.10.0、libpng15.so.15、libstdc++.so.6.0.24
- 这些依赖项直接从用于编译代码的容器中复制。
-
Python 函数然后通过
连接这些os.environ.update(dict(LD_LIBRARY_PATH='/var/task/lib'))
-
最后,我运行函数并得到以下错误代码:
/var/task/pdftohtml: /lib64/libc.so.6: 找不到版本“GLIBC_2.18”(/var/task/lib/libstdc++.so.6 需要)
我不知道 GLIBC_2.18 来自哪里,因为这个版本不存在于用于编译它的容器中。
真的很难过,但很想完成它,因为它会生成一个非常适合 Lambda 函数的轻量级二进制文件!
我哪里错了?
编辑
已解决 - 请参阅下面的 cmets。 AWS Linux 和 Lambda 有两个版本运行this version
按照其中一位评论者的建议,我在 EC2 实例中运行。虽然 libstdc++.so.6.24 看起来是正确的版本,但由于它本身是使用不同的 GLIBC 版本编译的,但它会引发错误。从源代码在 EC2 中编译工作正常。另一个技巧是确保 CXX_FLAGS 包含 -std=c++11。感谢那些帮助我解决这个问题的人!
【问题讨论】:
-
如果您遵循了官方的说明(例如使用
gcc64),那么这听起来值得支持票。看起来他们的环境有问题。
标签: linux cmake compilation aws-lambda glibc