如何使用Python在AWS lambda上运行32位二进制文件

如何使用Python在AWS lambda上运行32位二进制文件,python,amazon-web-services,aws-lambda,x86,Python,Amazon Web Services,Aws Lambda,X86,AWS Lambda Python 3.8运行时说它可以。我有一个用C构建的32位可执行文件。当我执行以下代码时,我得到: 错误的ELF类:ELFCLASS32 我在AmazonLinux2Docker镜像上尝试了同样的方法。我得到的错误是相同的。python可能会给CDLL一个64位实例 使用来自ubuntu的32位docker图像32位/ubuntu:16.04 import platform print(platform.architecture()) 我必须在32位体系结构中调用Py

AWS Lambda Python 3.8运行时说它可以。我有一个用C构建的32位可执行文件。当我执行以下代码时,我得到:

错误的ELF类:ELFCLASS32

我在AmazonLinux2Docker镜像上尝试了同样的方法。我得到的错误是相同的。python可能会给CDLL一个64位实例

使用来自ubuntu的32位docker图像
32位/ubuntu:16.04

import platform 
print(platform.architecture())
我必须在32位体系结构中调用Python

C代码:

#include <stdio.h>

int foo() {
    printf("Hello, world!\n");
    return 0;
}
我很确定他们安装了
gcc multi-lib
等等,这样系统就有了
/usr/lib32/*。所以可以运行32位二进制可执行文件。32位进程中的32位可执行文件可以加载32位库

他们还没有发明任何魔法,让您可以使用64位Python进程中的32位库。在该进程中执行用户空间代码时,CPU将处于64位模式,因此无法在32位库中正确执行32位x86机器代码

如果他们将普通的
/usr/bin/python
转换为32位可执行文件,那么64位库就会崩溃

我认为你对这条消息的含义过于乐观了这可能与您无关,因为您的程序是用Python编写的。您不能混合使用32位和64位代码,而常规的
python
仍然是一个64位程序


他们可能已经安装了一个32位的Python版本,如果您想在Python程序中加载遗留的32位库,可以使用它。也许可以寻找一个
python32
目录或二进制文件,如果他们这样称呼它的话?但是如果你什么也没发现,也不要惊讶

如果是,请更改
#/usr/bin/python
行在脚本的开头,指向正确的路径。或者安装您自己的32位Python内置/usr/local并使用它。

我很确定这意味着他们已经安装了
gcc multi-lib
等等,这样系统就有了
/usr/lib32/*。所以
可用,所以您可以运行32位二进制可执行文件。32位进程中的32位可执行文件可以加载32位库

他们还没有发明任何魔法,让您可以使用64位Python进程中的32位库。在该进程中执行用户空间代码时,CPU将处于64位模式,因此无法在32位库中正确执行32位x86机器代码

如果他们将普通的
/usr/bin/python
转换为32位可执行文件,那么64位库就会崩溃

我认为你对这条消息的含义过于乐观了这可能与您无关,因为您的程序是用Python编写的。您不能混合使用32位和64位代码,而常规的
python
仍然是一个64位程序


他们可能已经安装了一个32位的Python版本,如果您想在Python程序中加载遗留的32位库,可以使用它。也许可以寻找一个
python32
目录或二进制文件,如果他们这样称呼它的话?但是如果你什么也没发现,也不要惊讶


如果是,请更改
#/usr/bin/python
行在脚本的开头,指向正确的路径。或者在/usr/local中安装您自己的32位Python内置程序并使用它。

在迁移到Lambda/Python3.8之前,您是否在Amazon Linux 2(在EC2上)上尝试过此代码?是的,我在Amazon Linux 2 docker image上尝试过-我得到了相同的错误!好的,我会在EC2上进一步调查,然后再回到Lambda。我不确定AL2上支持的32位二进制文件和库有什么限制(如果有)。在迁移到Lambda/Python3.8之前,您是否在Amazon Linux 2(在EC2上)上尝试过此代码?是的,我在Amazon Linux 2 docker image上尝试过-我得到了相同的错误!好的,我会在EC2上进一步调查,然后再回到Lambda。我不确定AL2上支持的32位二进制文件和库有什么限制(如果有的话)。为了能够运行32位库,我必须在python脚本中做哪些更改?@user923227:只需
#中的路径/usr/bin/python
行。如果已经安装了32位Python解释器,则将其更改为a。否。这并没有解决问题。它得到了同样的错误。它仍然在从
platform.architecture()
@user923227调用
64位的
python解释器:然后您选择了错误的路径,或者您的python脚本正在被运行
/usr/bin/python
而不查看#的东西调用!线路。(所以你应该改变运行它们的东西。)-我发现只安装了
python3.8
!为了能够运行32位库,我必须在python脚本中做哪些更改?@user923227:只需
#中的路径/usr/bin/python
行。如果已经安装了32位Python解释器,则将其更改为a。否。这并没有解决问题。它得到了同样的错误。它仍然在从
platform.architecture()
@user923227调用
64位的
python解释器:然后您选择了错误的路径,或者您的python脚本正在被运行
/usr/bin/python
而不查看#的东西调用!线路。(所以你应该改变运行它们的东西。)-我发现只安装了
python3.8
import ctypes

def lambda_handler(event, context):
    libhi = ctypes.CDLL("my32bitlib.so")
    libhi.foo()

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

lambda_handler(None, None)