This article is original, reprint please specify: http://www.cnblogs.com/tolimit/
compilation environment:ubuntu-14.04.1
compiler:gcc, Arm-hisiv200-linux-gnueabi
python version:2.7.3
The process is relatively simple and consists of three steps:
- Compiling the X86 version of Python
- Cross-compile patch for Python source
- Cross-compiling Python
Compiling the X86 version of Python
Enter the python source directory and execute:
./configure
Compiling Python and Parser/pgen
make Python Parser/pgen
Back up the X86 version of the Python executable to Python_for_build
mv python python_for_build
The X86 version of the Pgen executable is equipped with the Pgen_for_build
mv Parser/pgen parser/pgen_for_build
Clean up the compiled project files, this step is for the subsequent cross-compilation to prepare
make Distclean
The most important thing about the whole step is to save both the Python and Pgen executables, since these two files will be used when you cross-compile python.
Cross-compile patch for Python source
My Python version is 2.7.3, so the patch also needs to hit the corresponding version, different versions of the patch as follows:
- Python-2.6.6-xcompile.patch
- Python-2.7.2-xcompile.patch
- Python-2.7.3-xcompile.patch
- Python-3.1.1-xcompile.patch
- Python-3.1.2-xcompile.patch
- Python-3.1.3-xcompile.patch
- Python-3.2.2-xcompile.patch
Enter the python source directory and execute
Patch -P1 < python-2.7. 3-xcompile. Patch
This shows that the patch is successful
Cross-compiling Python
Configuration
- CC for the specified c cross compiler, mine is ARM-HISIV200-LINUX-GNUEABI-GCC
- Cxx for the specified C + + cross compiler, mine is arm-hisiv200-linux-gnueabi-g++
- AR for AR tool, mine is Arm-hisiv200-linux-gnueabi-ar
- Ranlib is the Ranlib tool, mine is arm-hisiv200-linux-gnueabi-ranlib.
- Host is the target, I'm setting the Arm-hisiv200-linux-gnueabi
- Build to compile the environment host, mine is X86-linux-gnu
- Prefix for mounting position
My entire configuration command is as follows:
cc=arm-hisiv200-linux-gnueabi-gcc cxx=arm-hisiv200-linux-gnueabi-g++ ar=arm-hisiv200-linux-gnueabi- Ar ranlib=arm-hisiv200-linux-gnueabi-ranlib./configure--host=arm-hisiv200-linux-gnueabi--build= X86-linux-gnu--prefix=/home/shanlink/cross_compile/python-arm/
Here you remember to change the corresponding parameters on your machine
Compile
- Hostpython Specify the X86 version of the Python file that we compiled earlier
- Hostpgen Specify the X86 version of the Pgen file that we compiled earlier
My entire compile command is as follows (different compilers need to modify the corresponding Arm-hisiv200-linux-gnueabi location):
Make Hostpython=./python_for_build hostpgen=./parser/pgen_for_build bldshared=" arm-hisiv200-linux-gnueabi-gcc-shared" cross_compile=arm-hisiv200-linux-gnueabi-cross_compile_ Target=yes Hostarch=arm-hisiv200-linux-gnueabi Buildarch=x86-linux-gnu
Installation
compile with the following details:
Make Install Hostpython=./python_for_build bldshared="arm-hisiv200-linux-gnueabi-gcc-shared" Cross _compile=arm-hisiv200-linux-gnueabi-cross_compile_target=yes Prefix=/home/shanlink/cross_compile/python-arm
Finally, there are newly generated files and folders in the directory specified by prefix, and the main folder is/bin,/include,/lib,/share. Copy them all to the/usr directory of the target machine. Finally, execute a command on the target machine to check if the Python environment is complete.
Python/usr/lib/python2. 7/test/test___all___.py
Error
I did not encounter an error when I migrated to the above method, but I encountered an error when I migrated in other ways, and here is a note.
- The following error has been encountered at compile time
#error "This platform ' s pyconfig.h needs to define Py_format_long_long"
Edit the Pyconfig.h file, locate #undef Py_format_long_long, add a line # define Py_format_long_long "LL"
- The following error was encountered while running test on the target machine
' Import Site ' for last): "test.py"2 in < module> Import osimporterror:no module named OS
During the execution of the process found that all of the Python Py/pyc library files are not found, is due to pythonhome the path specified by the problem, and pythonhome the file schema has a problem, it must be: ${pythonhome}/lib/python2.7. Generally we copy the compiled folder (bin,lib,include,share) directly to USR, there is no problem (the Python library will be put into the/usr/lib/python2.7 inside)
Porting Python Notes