gpt4 book ai didi

python - python + pyinstaller 是否支持多个 OS/Linux 版本?

转载 作者:太空宇宙 更新时间:2023-11-04 10:01:50 28 4
gpt4 key购买 nike

我已经用 python 编写了几个小脚本,并使用 pyinstaller 构建了二进制文件。

当我在我的 Ubuntu 16.04 机器上构建它们时——它们会在我构建它们的机器上运行良好。但是将文件移动到 Centos/Redhat 7.4 机器会给我 GCLIB 和其他 .so 版本依赖性错误。

  • 使用相同版本的 Centos 在 docker 上构建相同的二进制文件不会出现这些错误。
  • 如果我尝试在 Centos 6.6 上运行在 Centos 7.4 上编译的二进制文件,我会再次遇到错误——但是在 Centos 6.6 上构建它可以在 Centos 6.6 上正常工作

我现在已经使用较低版本的 Centos 构建我的二进制文件解决了这个问题。

  • 我的具体问题是——在 Python 中,它是一种基于目标操作系统(假设仅针对 linux 目标)在不同操作系统上构建二进制文件的常用方法,还是我正在做的是黑客攻击/错误操作解决这个问题的方法?

我正在尝试了解如何以标准方式解决此问题。

最佳答案

只要 pyinstaller 生成的二进制文件只依赖于 glibc,那么在可用的最旧系统上构建它应该是一种有效的方法,并且它应该可以在未来的系统上运行。

一般来说,glibc 被设计为向后兼容,因此针对较旧版本的 glibc 构建的应用程序仍可使用较新的 glibc 运行,但反之则不然。它通过符号版本控制来做到这一点,其中您链接到的每个符号都可以有一个与之关联的版本,并且在任何情况下,较新的 glibc 已经更改了某些函数的 ABI,它也会有一个与旧 ABI 公开的兼容性例程使用较旧的符号版本,以便链接到旧版本的应用程序将动态链接到兼容性例程,而如果您有一个应用程序链接到较新的符号版本,则旧 glibc 中的新版本将不会动态链接到。

虽然其他库也可以做到这一点,但没有多少库作者愿意这样做,因此较新的版本可能只是不兼容,而 glibc 开发人员通常会尝试保持兼容性。

所以是的,只要最终的二进制文件只链接到 glibc,或其他遵循类似符号版本控制方案的库,以确保旧的二进制文件仍能正确链接到库的新版本,构建是完全有效的针对旧版本,然后在各种 Linux 发行版的新版本上运行它,甚至通常跨发行版运行它。

不幸的是,如果链接到较新的 glibc,则没有好的方法让链接器选择较旧的符号版本,因此通常最简单的方法是在 Docker 或其他类型的容器中包含具有您希望与之兼容的最旧的 glibc。

关于python - python + pyinstaller 是否支持多个 OS/Linux 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55585021/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com