My goal is to produce a portable executable that will run on glibc 2.5 and newer Linux systems. My local version of Glib is 2.11.1 so…
As advised I've moved to the development version of pyinstaller (using pyinstaller-pyinstaller-d9bfa9a.tar.gz from pyinstaller.org). Next I follow the instructions from http://www.pyinstaller.org/wiki/FAQ Namely Under Linux, I get runtime dynamic linker errors, related to libc. What should I do? The executable that PyInstaller builds is not fully static, in that it still depends on the system libc. Under Linux, the ABI of GLIBC is backward compatible, but not forward compatible. So if you link against a newer GLIBC, you can't run the resulting executable on an older system. The solution is to compile the bootloader on the oldest system you have around, so that it gets linked with the oldest version of GLIBC. Then, you can copy the bootloader binaries (support/loader/*) into your development system and run Build.py there. This takes me to the appendix in the manual titled "Building the bootloaders" To build the bootloaders on a suitably old system, I kick off a new clean Centos 5.4 32 bit instance on EC2 using the ami-efe4cf9b AMI. I run through the bootloader instructions and create a new set of bootloaders thus: [root@ip-10-227-131-79 ~]# python -V Python 2.4.3 [root@ip-10-227-131-79 ~]# /lib/libc.so.6 GNU C Library stable release version 2.5, by Roland McGrath et al. [root@ip-10-227-131-79 ~]# tar -xzf lsb-sdk-4.1.2-1.ia32.tar.gz [root@ip-10-227-131-79 ~]# cd lsb-sdk [root@ip-10-227-131-79 lsb-sdk]# ./install.sh This system appears to be a RPM-based distribution, such as those from Red Hat, SuSE/Novell, Mandriva, Asianux, etc. Is this correct? y Installing packages... There may have been problems with the package installation. Check error-log.txt for more information. [root@ip-10-227-131-79 lsb-sdk]# cat error-log.txt warning: lsb-build-base-4.1.4-1.i486.rpm: Header V4 DSA signature: NOKEY, key ID bdc76b46 warning: lsb-xdg-utils-4.0.0-2.i486.rpm: Header V4 DSA signature: NOKEY, key ID 44facb2f [root@ip-10-227-131-79 ~]# tar -xzf pyinstaller-pyinstaller-d9bfa9a.tar.gz [root@ip-10-227-131-79 ~]# mv pyinstaller-pyinstaller-d9bfa9a pyinstaller [root@ip-10-227-131-79 ~]# yum groupinstall "Development Tools" <output deleted> Complete! [root@ip-10-227-131-79 ~]# yum install python-devel <output deleted> Complete! [root@ip-10-227-131-79 ~]# cd pyinstaller [root@ip-10-227-131-79 pyinstaller]# cp -a support/loader/Linux-32bit support/loader/Linux-32bit.bak [root@ip-10-227-131-79 pyinstaller]# cd source [root@ip-10-227-131-79 source]# python waf configure build install Linux-32bit detected Building LSB bootloader. Checking for program gcc or cc : /usr/bin/gcc Checking for program cpp : /usr/bin/cpp Checking for program ar : /usr/bin/ar Checking for program ranlib : /usr/bin/ranlib Checking for gcc : ok Checking for program python : /usr/bin/python Checking for Python version : 2.4.3 Checking for library python2.4 : yes Checking for program python2.4-config : not found Checking for program python-config-2.4 : not found Checking for custom code : yes Checking for program lsbcc : not found Checking for program /opt/lsb/bin/lsbcc : /opt/lsb/bin/lsbcc Checking for LSB build tools >= 4.0 : yes Checking for library z : yes Checking for function readlink : yes Checking for flags -m32 : yes Checking for flags -Wl,--as-needed : yes 'configure' finished successfully (1.350s) Waf: Entering directory `/root/pyinstaller/source/build' [ 1/20] cc: linux/getpath.c -> build/debug/linux/getpath_1.o warning: dangerous include path /usr/include/python2.4 [ 2/20] cc: linux/utils.c -> build/debug/linux/utils_1.o warning: dangerous include path /usr/include/python2.4 [ 3/20] cc: common/main.c -> build/debug/common/main_1.o warning: dangerous include path /usr/include/python2.4 [ 4/20] cc: common/launch.c -> build/debug/common/launch_1.o warning: dangerous include path /usr/include/python2.4 [ 5/20] cc: linux/getpath.c -> build/release/linux/getpath_2.o warning: dangerous include path /usr/include/python2.4 [ 6/20] cc: linux/utils.c -> build/release/linux/utils_2.o warning: dangerous include path /usr/include/python2.4 [ 7/20] cc: common/main.c -> build/release/common/main_2.o warning: dangerous include path /usr/include/python2.4 [ 8/20] cc: common/launch.c -> build/release/common/launch_2.o warning: dangerous include path /usr/include/python2.4 [ 9/20] cc: linux/getpath.c -> build/releasew/linux/getpath_3.o warning: dangerous include path /usr/include/python2.4 [10/20] cc: linux/utils.c -> build/releasew/linux/utils_3.o warning: dangerous include path /usr/include/python2.4 [11/20] cc: common/main.c -> build/releasew/common/main_3.o warning: dangerous include path /usr/include/python2.4 [12/20] cc: common/launch.c -> build/releasew/common/launch_3.o warning: dangerous include path /usr/include/python2.4 [13/20] cc: linux/getpath.c -> build/debugw/linux/getpath_4.o warning: dangerous include path /usr/include/python2.4 [14/20] cc: linux/utils.c -> build/debugw/linux/utils_4.o warning: dangerous include path /usr/include/python2.4 [15/20] cc: common/main.c -> build/debugw/common/main_4.o warning: dangerous include path /usr/include/python2.4 [16/20] cc: common/launch.c -> build/debugw/common/launch_4.o warning: dangerous include path /usr/include/python2.4 [17/20] cc_link: build/debug/linux/getpath_1.o build/debug/linux/utils_1.o build/debug/common/main_1.o build/debug/common/launch_1.o -> build/debug/run_d [18/20] cc_link: build/release/linux/getpath_2.o build/release/linux/utils_2.o build/release/common/main_2.o build/release/common/launch_2.o -> build/release/run [19/20] cc_link: build/releasew/linux/getpath_3.o build/releasew/linux/utils_3.o build/releasew/common/main_3.o build/releasew/common/launch_3.o -> build/releasew/runw [20/20] cc_link: build/debugw/linux/getpath_4.o build/debugw/linux/utils_4.o build/debugw/common/main_4.o build/debugw/common/launch_4.o -> build/debugw/runw_d Waf: Leaving directory `/root/pyinstaller/source/build' 'build' finished successfully (4.153s) Waf: Entering directory `/root/pyinstaller/source/build'\* installing build/debug/run_d as ../../support/loader/Linux-32bit/run_d\* installing build/release/run as ../../support/loader/Linux-32bit/run\* installing build/releasew/runw as ../../support/loader/Linux-32bit/runw\* installing build/debugw/runw_d as ../../support/loader/Linux-32bit/runw_d Waf: Leaving directory `/root/pyinstaller/source/build' 'install' finished successfully (0.117s) I bundle up Linux-32bit loaders and move them to my development system replacing the files that are there. Then I repeat the exe build ~/python/orb/merchant $ python pyinstaller/pyinstaller.py -F orb_development_proxy.py INFO: wrote /home/paul/python/orb/merchant/orb_development_proxy.spec INFO: UPX is not available. INFO: checking Analysis INFO: building Analysis because out00-Analysis.toc non existent INFO: running Analysis out00-Analysis.toc INFO: Analyzing /home/paul/python/orb/merchant/pyinstaller/support/_pyi_bootstrap.py INFO: Analyzing orb_development_proxy.py INFO: Hidden import 'encodings' has been found otherwise INFO: Warnings written to /home/paul/python/orb/merchant/build/pyi.linux2/orb_development_proxy/warnorb_development_proxy.txt INFO: checking PYZ INFO: rebuilding out01-PYZ.toc because out01-PYZ.pyz is missing INFO: building PYZ out01-PYZ.toc INFO: checking PKG INFO: rebuilding out03-PKG.toc because out03-PKG.pkg is missing INFO: building PKG out03-PKG.pkg INFO: checking EXE INFO: rebuilding out02-EXE.toc because orb_development_proxy missing INFO: building EXE from out02-EXE.toc INFO: Appending archive to EXE /home/paul/python/orb/merchant/dist/orb_development_proxy ~/python/orb/merchant $ ls Now I take that executable (which works fine on the dev system) to the 5.4 environment: ~ $ orb_development_proxy ping merchant merchant Error loading Python lib '/tmp/_MEIgmrbBu/libpython2.6.so.1.0': /lib/libc.so.6: version `GLIBC_2.7' not found (required by /tmp/_MEIgmrbBu/libcrypto.so.0.9.8) Doh. It appears that rebuilding the bootloaders as documented does not in any way help with this GLIBC version problem whether on the development or release build of pyinstaller. Am I still doing something wrong? Cheers, Paul -- You received this message because you are subscribed to the Google Groups "PyInstaller" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/pyinstaller?hl=en.
