为什么我无法在 busybox 中运行我的 python 可执行文件?

问题描述 投票:0回答:1

设置如下:

我的设备资源非常有限,并且 busybox 正在其上运行。 使用 PyInstaller,我在具有相同架构的 Linux 系统上用我的 python 脚本构建了一个可执行文件。我知道可执行文件是兼容的,这是毫无疑问的。 只有一个问题:可执行文件仍然无法运行:

[37832] Error loading Python lib '/tmp/_MEIEmDggN/libpython3.11.so.1.0': dlopen: /usr/lib64/libm.so.6: version `GLIBC_2.35' not found (required by /tmp/_MEIEmDggN/libpython3.11.so.1.0)

我了解错误并想找出安装了哪个 glibc 版本,但我无论如何也找不到。

ldd --version
例如,不会产生任何结果(ldd 未找到)

我确信安装了一个c库,因为那里还运行着其他python可执行文件。我如何找出是哪一个以及什么版本?然后我想使用该特定版本构建可执行文件。在设备本身上构建可执行文件不是一个选项,它的存储空间和性能都非常小,无法始终提取所有依赖项并将它们捆绑在一起。

python pyinstaller executable glibc busybox
1个回答
0
投票

只有一个问题:可执行文件仍然无法运行

可执行文件无法运行,因为它需要(链接到)GLIBC-2.35(或更高版本),但正在具有旧版本 GLIBC 的计算机上运行。

这也与 busybox 无关

您必须:

  • 将目标上的 GLIBC 更新为 2.35(或更高版本),或者
  • 针对目标(或更早版本)上的任何版本编译并链接
    libpython3.11.so.1.0

第二个修复可以通过在

Python
或具有适当(旧)GLIBC 的 docker 中构建
chroot
来完成。


ldd --version
例如,不会产生任何结果(ldd 未找到)

您可以在没有

ldd
的情况下找到您拥有的版本 - 只需单独运行
/usr/lib64/libc.so.6
即可打印其版本。

© www.soinside.com 2019 - 2024. All rights reserved.