为 AWS-Lambda 编译 pdftohtml 二进制文件:GLIBC 问题
Compiling pdftohtml binary for AWS-Lambda: GLIBC issues
我正在尝试让 XPDF 的 pdftohtml 的 Lambda 快乐版本工作,但我没有运气。
到目前为止已经尝试了以下方法:
- 创建了Docker容器运行安装了最新的amazonlinux镜像
- 我已将源代码复制到此容器中 运行:
yum install cmake, gcc, gcc-c++, freetype-devel
- 使用 cmake 编译代码会生成一个二进制文件,该二进制文件可以在容器中完美执行,该容器应该与 Lambda OS 和环境相同。
- 我已经在容器中验证 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 运行s this version
有两个版本
I 运行 在 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.
我认为您不了解符号版本依赖性(请参阅 )。
错误消息告诉您,您的 libstdc++.so.6
是针对 GLIBC-2.18
或更新的 构建的,而您 运行 针对 GLIBC-2.17
或更老.
Where am I going wrong?
您的构建环境所针对的目标比您的部署环境所包含的要新得多。
您需要找到与您的部署目标匹配的构建环境,或者您需要将部署目标更改为不早于您的构建环境。
我正在尝试让 XPDF 的 pdftohtml 的 Lambda 快乐版本工作,但我没有运气。
到目前为止已经尝试了以下方法:
- 创建了Docker容器运行安装了最新的amazonlinux镜像
- 我已将源代码复制到此容器中 运行:
yum install cmake, gcc, gcc-c++, freetype-devel
- 使用 cmake 编译代码会生成一个二进制文件,该二进制文件可以在容器中完美执行,该容器应该与 Lambda OS 和环境相同。
- 我已经在容器中验证 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 运行s this version
有两个版本I 运行 在 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.
我认为您不了解符号版本依赖性(请参阅
错误消息告诉您,您的 libstdc++.so.6
是针对 GLIBC-2.18
或更新的 构建的,而您 运行 针对 GLIBC-2.17
或更老.
Where am I going wrong?
您的构建环境所针对的目标比您的部署环境所包含的要新得多。
您需要找到与您的部署目标匹配的构建环境,或者您需要将部署目标更改为不早于您的构建环境。