我已经使用pyinstaller在CentOS 6.8上编译了python3.6程序,并在较新版本的Linux上进行了测试。它按预期工作。 CentOS 6.8已安装GLIBC 2.12
pyinstaller --onefile --clean --hidden-import sqlite3 --hidden-import pycryptodome my_python.py
但是,在Redhat 5.8上执行编译的程序时,由于安装了GLIBC 2.5,所以出现了以下错误消息
[24522] Error loading Python lib '/tmp/_MEIl16Rvq/libpython3.6m.so.1.0': dlopen: /lib64/libc.so.6: version `GLIBC_2.7' not found (required by /tmp/_MEIl16Rvq/libpython3.6m.so.1.0)
您能帮我如何在CentOS 6 for Redhat 5.8上编译python3.6程序吗?
PS:我无法更新GLIBC,因为我要将同一程序分发到许多Linux服务器上。
答案 0 :(得分:2)
此问题的答案在pyinstaller's FAQ中列为GNU / Linux部分的第一篇。这是我强调的简化版本。
PyInstaller生成的可执行文件不是完全静态的,因为它仍然取决于系统libc。在Linux下,GLIBC的ABI不向前兼容。 [...]提供的二进制引导加载程序应与较旧的GLIBC一起使用。但是,libpython.so和其他动态库仍依赖于较新的GLIBC。 解决方案是在您所拥有的最旧的系统上编译Python解释器及其模块(可能还有引导加载程序),以使其与最旧的GLIBC版本链接。