libffi-d78936b1.so.6.0.4:无法打开 AWS Lambda 函数上的共享对象文件错误

Posted

技术标签:

【中文标题】libffi-d78936b1.so.6.0.4:无法打开 AWS Lambda 函数上的共享对象文件错误【英文标题】:libffi-d78936b1.so.6.0.4: cannot open shared object file Error on AWS Lambda function 【发布时间】:2018-12-15 13:49:57 【问题描述】:

我正在尝试使用 watson_developer_cloud sdk 部署 python Lambda 包。密码学是这个包拥有的众多依赖项之一。我已经在 Linux 机器上构建了这个包。我的包也包括 .libffi-d78936b1.so.6.0.4 隐藏文件。但是我的 lambda 函数仍然无法访问它。我仍然收到“libffi-d78936b1.so.6.0.4:无法打开共享对象文件”错误。 我已经在 Vagrant 服务器上构建了我的包,使用这里的说明:https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example-deployment-pkg.html#with-s3-example-deployment-pkg-python

确切的错误:

Unable to import module 'test_translation': libffi-d78936b1.so.6.0.4: cannot open shared object file: No such file or directory

请注意,正如solution 中所述,我已经使用 zip -r9 $DIR/lambda_function.zip . 而不是 * 创建了我的包。但它仍然不适合我。

任何方向都是高度可观的。

【问题讨论】:

【参考方案1】:

libffi-d78936b1.so.6.0.4 位于名为 .libs_cffi_backend 的隐藏文件夹中。

所以要在你的 lambda zip 中添加这个隐藏文件夹,你应该这样做:

zip -r ../lambda_function.zip * .[^.]*

这将在上面的目录中创建一个名为 lambda_function.zip 的 zip 文件,其中包含当前目录中的所有文件(第一个 *)以及以 .* 开头但不以 ..* 开头的所有文件([^.] )

【讨论】:

没错,隐藏文件夹.libs_cffi_backend 错误地没有包含在压缩文件中。因此,如果您在压缩过程之前复制文件,请不要忘记这样做:cp -r /path/origin/. /path/destiny/.【参考方案2】:

在这种情况下,我会花一些时间设置本地 SAM 环境,以便您可以:

1 - 调试您的 Lambda

2 - 检查正在打包的内容和文件层次结构

https://docs.aws.amazon.com/lambda/latest/dg/test-sam-cli.html

或者,您可以删除此导入并检测您的 lambda 函数以打印它“看到”的一些文件和目录。

我强烈建议您尝试一下 SAM,因为它不仅会使这种调试方式更容易,而且您需要在以后执行的任何进一步测试。 Lambda 很难调试。

【讨论】:

安装docker和SAM,我肯定要检查安装权限。如果有一种解决方法可以让 Lambda 函数使用共享库,那就太好了。【参考方案3】:

有点晚了,我会评论弗兰克的回答,但声誉不够。

我在我的部署包中包含了隐藏目录.libs_cffi_backend,但由于某种原因,Lambda 找不到位于其中的libffi-d78936b1.so.6.0.4 文件。

将此文件复制到与我的 lambda 处理程序相同的“根”级目录后,它能够加载依赖项并执行。

另外,确保部署包中的所有文件都是可读的chmod -R 644 .

【讨论】:

以上是关于libffi-d78936b1.so.6.0.4:无法打开 AWS Lambda 函数上的共享对象文件错误的主要内容,如果未能解决你的问题,请参考以下文章