【问题标题】:Error when using .so: "wrong ELF class: ELFCLASS64" on 32-bit machine使用 .so 时出错:在 32 位机器上出现“错误的 ELF 类:ELFCLASS64”
【发布时间】:2019-07-30 15:46:16
【问题描述】:

在 64 位机器上使用 Python 2.7.15 Ubuntu 18.04.2 根据指令构建 https://github.com/Azure/azure-iot-sdk-python/blob/master/doc/python-devbox-setup.md#build-the-azure-iot-hub-sdks-for-python-on-linux,在运行 Python 2.7.12 的 32 位 Yocto 机器上运行生成的 .so 时出现此错误。

根据这篇文章:gcc error: wrong ELF class: ELFCLASS64,我想构建可以使用 GCC 标志来完成。然而,在运行 ./build.sh 时简单地使用“-m32”是行不通的。

我怀疑我也可以使用/更改某种配置参数。但是,我在 SDK 中找不到任何明显的更改。

更具体地说,错误是: 'ImportError: /home/root/build_folder/iothub_client.so: 错误的 ELF 类:ELFCLASS64'

【问题讨论】:

    标签: python azure-iot-hub azure-iot-edge azure-iot-sdk


    【解决方案1】:

    在我看来,您应该为您的目标机器交叉编译 Python SDK。根据 gcc 文档的 -m32 标志用于 Nvidia PTX 选项。我怀疑你不想那样。您需要为目标设备的架构找到合适的工具链,并使用它来构建 Python 二进制文件。这里有可以帮助您解决此问题的文档:https://github.com/Azure/azure-iot-sdk-python/blob/master/doc/Example%20of%20Cross%20Compiling%20the%20Azure%20IoT%20SDK%20for%20Python.md

    你没有提到你的 Yocto 设备的架构是什么。

    【讨论】:

    • 马克当然是正确的。 -m32 标志与真正由未交叉编译引起的问题无关。 Azure 发布了一个全新的IoT SDK for Python,它允许跳过所有这些并用纯 Python 编写。
    • 确实有。本着全面披露的精神,我从事 Azure IoT 技术的开发人员支持工作,但我在回复时无法告诉你,因为它尚未被视为公开信息。我相信这段代码仍然只是测试版,但应该会让 Python 程序员的生活更轻松。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2016-11-25
    • 2010-09-17
    • 1970-01-01
    • 2011-09-01
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多