我正在尝试让 XPDF 的 pdftohtml 的 Lambda 快乐版本工作,但我没有运气。
到目前为止,已经尝试了以下方法:
- 创建运行最新 amazonlinux 镜像的 Docker 容器
- 我已将源代码复制到此容器中并运行:
yum install 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: version `GLIBC_2.18' not found (required by /var/task/lib/libstdc++.so.6)
我不知道 GLIBC_2.18 来自哪里,因为这个版本不存在于用于编译它的容器中。
真的很难过,但很想完成它,因为它会生成一个非常适合 Lambda 函数的轻量级二进制文件!
我哪里错了?
编辑
已解决 - 请参阅下面的评论。有两个版本的 AWS Linux 和 Lambda 运行 this version
我按照其中一位评论者的建议在 EC2 实例中运行。虽然 libstdc++.so.6.24 看起来是正确的版本,因为它本身是用不同的 GLIBC 版本编译的,但它会抛出错误。从源代码在 EC2 中编译工作正常。另一个技巧是确保 CXX_FLAGS 包含 -std=c++11。感谢那些帮助我解决这个问题的人!
最佳答案
I've no idea where the GLIBC_2.18 comes from as this version isn't present in the container used to compile it.
我认为您不了解符号版本依赖性(参见 here )。
错误消息告诉您您的 libstdc++.so.6
是针对 GLIBC-2.18
或更高版本 构建的,并且您正在运行针对GLIBC-2.17
或更旧。
Where am I going wrong?
您的构建环境的目标是比您的部署环境包含的内容更新得多的内容。
您需要找到与您的部署目标匹配的构建环境,或者您需要将部署目标更改为不早于您的构建环境。
关于linux - 为 AWS-Lambda : GLIBC issues 编译 pdftohtml 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54697085/