Cross Compiling Python for Embedded Linux

http://randomsplat.com/id5-cross-compiling-python-for-embedded-linux.html


Cross Compiling Python for Embedded Linux

This article details how to cross compile Python for the ARM and PowerPC platforms.  It should apply equally to other platforms as well, just plug-in the correct cross-compiler.  The article supports Python versions, 2.6.6 (Thanks to evadeflow), 2.7.2, 2.7.3 (thanks to Lothsahn) and 3.1.1, 3.1.2, 3.1.3, 3.2.2.

This page has been translated into <a href=”http://www.webhostinghub.com/support/es/misc/cruzada-para-linux“>Spanish</a> language by Maria Ramos  from <a href=”http://www.webhostinghub.com/support/edu>Webhostinghub.com/support/edu</a>.

Firstly, download the Python that you want to use from http://www.python.org/

Unpack the Python package using tar:

tar  -xvzf Python-2.7.2.tgz

This will create a directory called Python-2.7.2.  Goto the directory:

cd Python-2.7.2

Then run these commands to build the host components:

. /configure

make python Parser /pgen

mv python hostpython

mv Parser /pgen Parser /hostpgen

make distclean

Download the correct patch for your version of Python:

Then apply the patch:

patch -p1 < Python-2.7.2-xcompile.patch

Then run this (where ~/Python-2.7.2/_install/ is your desired installation path).  Note also that you must replace all instances of the cross compiler and the host build system in the lines below.  If you are on an x86_64 machine, then you should use x86_64-linux-gnu as the host.

CC=ppc_6xx-gcc  CXX=ppc_6xx-g++  AR=ppc_6xx-ar  RANLIB=ppc_6xx-ranlib . /configure  --host=ppc-linux  --build=x86_64-linux-gnu  --prefix= /python

make  HOSTPYTHON=. /hostpython  HOSTPGEN=. /Parser /hostpgen  BLDSHARED= "ppc_6xx-gcc -shared"  CROSS_COMPILE=ppc_6xx-  CROSS_COMPILE_TARGET= yes  HOSTARCH=ppc-linux  BUILDARCH=x86_64-linux-gnu

make  install  HOSTPYTHON=. /hostpython  BLDSHARED= "ppc_6xx-gcc -shared"  CROSS_COMPILE=ppc_6xx-  CROSS_COMPILE_TARGET= yes  prefix=~ /Python-2.7.2 /_install

This will install all your python binaries and libraries in ~/Python-2.7.2/_install.

Copy the entire _install directory to the device, setup the PATH environment variable to include the path the Python executable and run:

python lib /python- 2.7 /test /test___all__.py

…and hopefully all the tests will run correctly.

To speed up the importing of Python modules on the target, I recommend to zip up the lib directory to make a file called python27.zip.  This means that we do not have to copy all the Python files to the target, just the one zip file.  This technique might also save space, but that depends on your file system.  On the host machine:

cd _install /lib /python2.7

zip  -r  -y python27.zip .

Delete libpythonxxx.a site-packages, lib-dynload, config and anything else you do not need from the python27.zip file.

Copy the _install/bin/python to the /usr/bin directory on the target:

Copy the python27.zip file to the /usr/lib directory on the target:

Create a directory on the target called python2.7 in the /usr/lib directory and copy the following directories to that directory:

  • ./lib/python2.7/config
  • ./lib/python2.7/lib-dynload
  • ./lib/python2.7/site-packages

Your directory structure on the target must be as follows:

/usr /lib  # ls

python2.7 python27.zip

/python /lib /python2.7  # ls

config lib-dynload site-packages

Set the PYTHONHOME environment variable to /usr/ and you are ready to run Python on the target.

 

Building SQLLite and other dependancies

Thanks to Lothsahn’s 2.7.3 patch, it is now possible to build sqlite3, bz2, gz, ssl and ctypes.  Lothsahn provides the following instructions:

To do the compilation, the dependencies must be in the include and lib folder one path up from the python install.   For example:

<base directory>/include <– header files go here

<base directory>/lib <– shared object files go here

/Python-2.7.3 <—Python sources go here during compile

Dependencies include libffi, sqlite, openssl, bzip2, zlib, etc.

报错root@debian:/usr/src/asterisk-13.38.3# ./configure --with-crypto --with-ssl --with-srtp --with-pjproject-bundled checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define __EXTENSIONS__... yes checking whether char is unsigned... no checking for uname... /usr/bin/uname checking for g++... g++ checking whether we are using the GNU C++ compiler... yes checking whether g++ accepts -g... yes checking how to run the C preprocessor... gcc -E checking how to run the C++ preprocessor... g++ -E checking for a sed that does not truncate output... /usr/bin/sed checking for egrep... grep -E checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for gawk... no checking for mawk... mawk checking for a BSD-compatible install... /usr/bin/install -c checking whether ln -s works... yes checking for ranlib... ranlib checking for GNU make... make checking for egrep... (cached) /usr/bin/grep -E checking for strip... strip checking for ar... ar checking for bison... : checking for cmp... /usr/bin/cmp checking for cat... /usr/bin/cat checking for cut... /usr/bin/cut checking for flex... : checking for grep... (cached) /usr/bin/grep checking for python2.7... no checking for python2... no checking for python... no checking for python3... /usr/bin/python3 checking for find... /usr/bin/find checking for basename... /usr/bin/basename checking for dirname... /usr/bin/dirname checking for sh... /bin/bash checking for ln... /usr/bin/ln checking for doxygen... : checking for dot... : checking for wget... /usr/bin/wget checking for curl... /usr/bin/curl checking for xmllint... : checking for xmlstarlet... no checking for xml... no checking for bash... /bin/bash checking for git... /usr/bin/git checking for alembic... : checking for bzip2... /usr/bin/bzip2 checking for tar... /usr/bin/tar checking for patch... /usr/bin/patch checking for sed... (cached) /usr/bin/sed checking for nm... /usr/bin/nm checking for ldconfig... /sbin/ldconfig checking for sha1sum... /usr/bin/sha1sum checking for openssl... /usr/bin/openssl checking for bison that supports parse-param... checking for soxmix... no checking for md5... no checking for md5sum... md5sum checking for a sed that does not truncate output... (cached) /usr/bin/sed checking whether gcc is Clang... no checking whether pthreads work with -pthread... yes checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE checking whether more special flags are required for pthreads... no checking for PTHREAD_PRIO_INHERIT... yes checking for RAII support... checking for gcc -fnested-functions... no checking for clang strsep/strcmp optimization... no checking for embedded pjproject (may have to download)... configuring [pjproject] Verifying /tmp/pjproject-2.10.tar.bz2 [pjproject] Verify successful [pjproject] Unpacking /tmp/pjproject-2.10.tar.bz2 [pjproject] Applying patches /usr/src/asterisk-13.38.3/third-party/pjproject/patches /usr/src/asterisk-13.38.3/third-party/pjproject/source The text leading up to this was: -------------------------- |From e8000cc80e5f8ba02cc52852edc02cdb0e949525 Mon Sep 17 00:00:00 2001 |From: Richard Mudgett <rmudgett@digium.com> |Date: Mon, 6 Aug 2018 11:24:25 -0500 |Subject: [PATCH 1/5] 0000-configure-ssl-library-path.patch | |--- | aconfigure | 6 +++++- | aconfigure.ac | 6 +++++- | 2 files changed, 10 insertions(+), 2 deletions(-) | |diff --git a/aconfigure b/aconfigure |index 1c449b8..c4c6060 100755 |--- a/aconfigure |+++ b/aconfigure -------------------------- File to patch: 如何解决
07-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值