走了很多弯路,网上的方法只能参考,自己用的时候根本无法编译过去,还好花了一天半时间,最终解掉了。
总结宝贵的经验如下:
1、下載python http://www.python.org/ftp/python/2.7/Python-2.7.1.tar.bz2,或者http://www.python.org/ftp/python下面找自己想用的版本,本文件仅供Python-2.7.1版本参考
2、解壓 tar xjvf Python-2.7.1.tar.bz2
3、要先生成一個pgen:
cd Python-2.7.1
mkdir build.pc
cd build.pc
../configure
make Parser/pgen然後ls Parser一下,應該就能看到有pgen了。
4、配置
--prefix后面的路径请改成自己的:
cd ../
echo ac_cv_file__dev_ptmx=no > config.site
echo ac_cv_file__dev_ptc=no >> config.site
./configure --prefix=/home/denny/Project/python_install --host=mips-linux-gnu "CC=mips-linux-gnu-gcc -EL" "CFLAGS=-EL" "LDFLAGS=-EL"5、修改Makefile:
(1)把
OPT= -DNDEBUG -g -O3 -Wall -Wstrict-prototypes改成
OPT= -DNDEBUG -O2 -Wall -Wstrict-prototypes去掉-g,不要debug python,-O3改為-O2,空間緊張O2就可以了。
(2)在:
PGEN= Parser/pgen$(EXE)一行的下面加上:
PGEN_HOST= build.pc/Parser/pgen$(EXE)表明我們在HOST上運行的pgen。
(3)在要使用PGEN的地方改為PGEN_HOST:
(GRAMMAR_H)(GRAMMAR_C): (PGEN)(GRAMMAR_INPUT)-(PGEN)(GRAMMAR_INPUT) (GRAMMAR_H)(GRAMMAR_C)
改為:
(GRAMMAR_H)(GRAMMAR_C): (PGEN)(GRAMMAR_INPUT)-(PGEN_HOST)(GRAMMAR_INPUT) (GRAMMAR_H)(GRAMMAR_C)
(4)修改所有使用新生成的python的地方,可以用gedit的替换功能,总共有16个地方:
所有
./$(BUILDPYTHON)
的地方,都改為python
,如:platform: (BUILDPYTHON)(RUNSHARED) ./(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform#改為:
platform:
(BUILDPYTHON)$(RUNSHARED) python -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform
6、make 出現錯誤:
Include/pyport.h:243: error: #error "This platform's pyconfig.h needs to define PY_FORMAT_LONG_LONG"
修改pyconfig.h: 找到
#undef PY_FORMAT_LONG_LONG
后面添加一行:#define PY_FORMAT_LONG_LONG "ll"7、make,make install
如果没有错误,说明编译成功了!
如果出现错误:
./regen: line 3: /home/denny/Project/Python-2.7.1/python: cannot execute binary file: Exec format error
make: *** [Lib/plat-linux3] Error 126running build_scripts
mkdir ./Lib/plat-linux3
cp ./Lib/plat-generic/regen ./Lib/plat-linux3/regen
export PATH; PATH="`pwd`:PATH"; \
export PYTHONPATH; PYTHONPATH="`pwd`/Lib"; \
export DYLD_FRAMEWORK_PATH; DYLD_FRAMEWORK_PATH="`pwd`"; \
export EXE; EXE=""; \
cd ./Lib/plat-linux3; ./regen
pythonEXE ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/netinet/in.h
./regen: line 3: /home/denny/Project/Python-2.7.1/python: cannot execute binary file: Exec format error
make: *** [Lib/plat-linux3] Error 126解法:
rm -f /usr/bin/python