目標:在arm上使用python-2.7.10
1、首先解壓python-2.7.10的源碼,然后在同級目錄下建立一個build.pc的目錄,我們需要首先生成一個x86 linux下可用的python解釋器:
../Python-2.7.10/configure
make
按照默認配置生成。
2、修改Python-2.7.10目錄下的configure腳本,在開頭加上兩行:
ac_cv_file__dev_ptmx="yes"
ac_cv_file__dev_ptc="no"
3、建立一個build.arm的目錄,進入此目錄配置python:
../Python-2.7.10/configure --host=arm-arago-linux-gnueabi--prefix=/work/winshare/release --build=arm-arago-linux --disable-ipv6--enable-shared
make
編譯的過程會產生這個錯誤:
arm-arago-linux-gnueabi-gcc -DNDEBUG -g -fwrapv -O3 -Wall-Wstrict-prototypes? Parser/acceler.oParser/grammar1.o Parser/listnode.o Parser/node.o Parser/parser.oParser/parsetok.o Parser/bitset.o Parser/metagrammar.o Parser/firstsets.oParser/grammar.o Parser/pgen.o Objects/obmalloc.o Python/mysnprintf.oPython/pyctype.o Parser/tokenizer_pgen.o Parser/printgrammar.oParser/pgenmain.o -lpthread -ldl?-lpthread -lutil -o Parser/pgen
make[1]: Leaving directory `/work/winshare/build.arm'
Parser/pgen ../Python-2.7.10/Grammar/Grammar Include/graminit.hPython/graminit.c
Parser/pgen: Parser/pgen: cannot execute binary file
make: ***[Include/graminit.h] Error 126
4、復制build.pc目錄下的pgen文件:
cp ../build.pc/Parser/pgen ./Parser/
繼續:
make
一切正常,生成結束,但在makeinstall時出問題了:
/usr/bin/install -c -m 644 ../Python-2.7.10/LICENSE/work/winshare/release/lib/python2.7/LICENSE.txt
if test -d /work/winshare/release/lib/python2.7/distutils/tests;then \
??????????????/usr/bin/install -c -m 644 ../Python-2.7.10/Modules/xxmodule.c \
??????????????????????/work/winshare/release/lib/python2.7/distutils/tests ; \
?????? fi
PYTHONPATH=/work/winshare/release/lib/python2.7?? \
??????????????_PYTHON_PROJECT_BASE=/work/winshare/build.arm _PYTHON_HOST_PLATFORM=linux2-armPYTHONPATH=/work/winshare/build.arm/build/lib.linux2-arm-2.7:../Python-2.7.10/Lib:../Python-2.7.10/Lib/plat-linux2python2.7 -Wi -tt /work/winshare/release/lib/python2.7/compileall.py \
?????????????? -d/work/winshare/release/lib/python2.7 -f \
?????????????? -x'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
??????????????/work/winshare/release/lib/python2.7
Traceback (most recent call last):
File"/work/winshare/release/lib/python2.7/compileall.py", line 16, in<module>
?? import struct
File"/work/winshare/release/lib/python2.7/struct.py", line 1, in<module>
?? from _struct import *
ImportError:/work/winshare/build.arm/build/lib.linux2-arm-2.7/_struct.so: cannot openshared object file: No such file or directory
make: ***[libinstall] Error 1
這個問題是由于安裝時使用了python,但Makefile中指定了錯誤的庫,使用了arm平臺上的so,顯然這是不能在我們的x86linux上運行的。
5、修改build.arm下的Makefile
在Makefile中查找PYTHONPATH,將build.pc目錄下的庫文件路徑添加到PYTHONPATH中,如:
PYTHON_FOR_BUILD=_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM)PYTHONPATH=/work/winshare/build.pc/build/lib.linux-i686-2.7/:$(shelltest -f pybuilddir.txt && echo $(abs_builddir)/`catpybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) python2.7
注意,所有的PYTHONPATH中都需要修改。
再次makeinstall,就在release目錄下得到了完整的python文件。