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

时间:2020-03-20 19:51:44

标签: python amazon-web-services aws-lambda x86

AWS Lambda Python 3.8运行时表示可以execute 32bit libraries。我有一个用C内置的32位可执行文件。执行以下代码时-我得到:

wrong ELF class: ELFCLASS32

我在Amazon Linux 2 docker映像上尝试了相同的操作。我得到的错误是相同的。可能是python为CDLL提供了64位实例。

使用来自ubuntu 32bit/ubuntu:16.04的32位docker镜像可以正常工作。

import platform 
print(platform.architecture())

我将不得不在32位体系结构中调用Python。

C代码:

#include <stdio.h>

int foo() {
    printf("Hello, world!\n");
    return 0;
}

Python代码:

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)

1 个答案:

答案 0 :(得分:0)

我很确定Example只是意味着他们已经安装了gcc-multilib,依此类推,因此系统具有/usr/lib32/*.so可用,因此您可以运行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构建并使用。