linux - 为 AWS-Lambda : GLIBC issues 编译 pdftohtml 二进制文件

标签 linux cmake compilation aws-lambda glibc

我正在尝试让 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/

相关文章:

typescript - 如何调试 TypeScript 编译性能问题

编译器执行顺序

Linux 安装程序创建者

c++ - CMake 包含非 cmake 库的第三方 header

c++ - 使用子目录源创建 CMakeLists 库

linux - LOAD 段的对齐不是 2MB 的倍数

php - shell_exec 不适用于 find

linux - Linux Mint/Ubuntu 14.04 上 Tensorflow 的 GPU 支持

linux - 在两个远程位置之间复制文件

c++ - 未定义对 `omp_get_wtime' 的引用