在UBUNTU 14.04+mips-linux-gnu-gcc下编译Python2.7.1

走了很多弯路,网上的方法只能参考,自己用的时候根本无法编译过去,还好花了一天半时间,最终解掉了。
总结宝贵的经验如下:

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 126

running 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
python
EXE ../../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