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

2024-09-27 23:25:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

wrong ELF class: ELFCLASS32

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

使用来自ubuntu的32位docker映像32bit/ubuntu:16.04它工作得很好

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)

Tags: lambda代码importnoneawshelloreturnfoo
1条回答
网友
1楼 · 发布于 2024-09-27 23:25:33

我很确定https://aws.amazon.com/about-aws/whats-new/2018/09/amazon-linux-2-now-supports-32-bit-applications-and-libraries/只是意味着他们已经安装了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内置程序并使用它

相关问题 更多 >

    热门问题