[英]Does python + pyinstaller support multiple OS/Versions of linux?
我已经用python编写了几个小脚本,并使用pyinstaller构建了二进制文件。
当我在Ubuntu 16.04机器上构建它们时-它们将在我构建它们的机器上正常运行。 但是将文件移动到Centos / Redhat 7.4机器上会给我GCLIB和其他.so版本依赖性错误。
我已经使用较低版本的Centos解决了该问题,目前正在构建我的二进制文件。
我试图了解如何以标准方式解决此问题。
只要pyinstaller生成的二进制文件仅取决于glibc,那么在可用的最旧的系统上构建它应该是一种有效的方法,并且它应该在将来的系统上运行。
通常,glibc设计为向后兼容,因此针对较早版本的glibc构建的应用程序仍将与更新的glibc一起运行,反之则不然。 它通过符号版本控制来做到这一点,在该版本中,链接到的每个符号都可以具有与其相关联的版本,并且在任何情况下,如果新的glibc更改了某些功能的ABI,它还将具有与暴露的旧ABI的兼容性例程。使用较旧的符号版本,以便与旧版本链接的应用程序将与兼容性例程动态链接,而如果您有与较新的符号版本链接的应用程序,则较旧的glibc中不会有较新的版本来动态链接至。
尽管其他库也可以做到这一点,但没有多少库作者会为此而烦恼,因此较新的版本可能根本不兼容,而glibc开发人员通常会尝试保持兼容性。
因此,是的,只要最终二进制文件仅链接到glibc或遵循类似符号版本控制方案的其他库,以确保较旧的二进制文件仍可正确链接至该库的较新版本,则针对较旧的库进行构建是完全有效的版本,然后在各种Linux发行版的较新版本上运行它,甚至在各个发行版上也可以运行。
不幸的是,如果链接到较新的glibc,没有很好的方法让链接器选择较旧的符号版本,因此,通常最简单的方法是在Docker或其他类型的容器中,该容器包含具有较旧glibc的较旧发行版。您想要与之兼容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.