为AWS-Lambda编译pdftohtml二进制文件:GLIBC问题

时间:2019-02-14 18:41:04

标签: 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:未找到版本“ GLIBC_2.18”(/ 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。感谢那些帮助我解决这个问题的人!

1 个答案:

答案 0 :(得分:0)

  

我不知道GLIBC_2.18的来源,因为该版本不存在于用于编译它的容器中。

我认为您不了解符号版本依赖性(请参见here)。

错误消息告诉您libstdc++.so.6是针对GLIBC-2.18 或更高版本构建的,而您正在针对GLIBC-2.17 或更旧的版本运行< / em>。

  

我要去哪里错了?

您的构建环境所针对的目标比部署环境所包含的目标要新得多。

您需要找到与部署目标匹配的构建环境,或者需要将部署目标更改为不早于构建环境。