我用一个简单的Python脚本创建了一个可执行文件,使用了Ubuntu18.04上的pyinstaller,并在另一台计算机上测试了它(也使用了Ubutnu 18),并且工作得很好。
但是,当对更复杂的脚本(更多的库导入)进行同样的尝试时,可执行文件会在另一台计算机中发生错误。
ImportError: /lob/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.25' not found
这不可能是Python的不兼容性(请参阅https://github.com/pyinstaller/pyinstaller/issues/4758),因为另一个脚本工作得很好。因此,它很可能是基于第二个脚本导入的一些库。
如何包括由Pyinstaller生成的可执行文件中导入的库(如果这甚至是此错误的根源)?
发布于 2022-08-06 17:36:08
解A
我还没有确认这一解决办法,但有时会有所帮助。删除目录./build和./dist,然后尝试使用pyinstaller再次创建可执行文件。
解B
至少对我来说,解决方案是在旧版本的操作系统上构建可执行文件。
我也看到了同样的错误。
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /tmp/_MEIjdcWu4/./libX11.so.6)
[32614] Failed to execute script 'test_executable' due to unhandled exception!
我在Ubuntu22.04上用Pyinstaller构建了我的可执行程序。然后,我在较旧的Ubuntu20.04上复制并运行了可执行文件,并遇到了错误。
根据下面的注释,这可能是一个兼容性问题,在新操作系统上构建的可执行文件与旧操作系统不兼容。
“值得注意的是,问题可能是与构建的程序捆绑在一起的库与系统库冲突,从而阻止了DRI驱动程序的正确加载。
罪魁祸首可能是标准c/c++库(libgcc_s.so.1,libstdc++.so.6),也可能是X11库(libX11.so.6、libXau.so.6、libXdmcp.so.6、libXext.so.6、`libXrender.so.1.)。也许前者比后者更有可能。
例如,如果构建系统上的libstdc++.so.6比目标系统使用的要早,那么非绑定库将因缺少符号而无法加载(这些符号存在于库的较新的系统版本中,而不在绑定库中)。对于linux上的二进制软件来说,这实际上是一个很常见的问题,特别是在更多的边缘发行版上。在这些情况下,删除错误库的捆绑版本可能会有所帮助。
(系统libgvfsdbus.so也有类似的问题,它缺少一个在捆绑的libglib-2.0.so.0中不可用的符号,该符号可能比系统上可用的glib库更旧)。
https://stackoverflow.com/questions/71518650
复制相似问题