1、准备
https://www.python.org/ 官网上下载最新的Python-2.7.15.tgz
由于需要zlib和sqlite3因此分别去官网下载
sqlite-autoconf-3250300.tar.gz
zlib-1.2.1.2.tar.gz
2、编译sqlite3
cd sqlite-autoconf-3250300
./configure --host=mips64el-linux --build=x86_64-redhat-linux --prefix=/home/chentao/work/project/Z2-KERNEL-t/rootfs/rootfs_fs/fsxxx/usr
make
make install
其中:--prefix=xxx为指定编译完成安装路径,一般为制作的根文件系统的usr目录下
3、编译zlib
由于zlib编译不支持--host的方式指定交叉编译。
CC=mips64el-linux-gcc ./confiure --shared --prefix=/home/chentao/work/project/Z2-KERNEL-t/rootfs/rootfs_fs/fsxxx/usr
make
mak install
4、编译python
由于mips环境运行的时候 import ctypes会出现问题,提示未实现某函数这里需要修改模块编译
diff -r 656543a2ad75 Modules/_ctypes/libffi/fficonfig.py.in
--- a/Modules/_ctypes/libffi/fficonfig.py.in Mon Mar 02 23:32:02 2015 -0800
+++ b/Modules/_ctypes/libffi/fficonfig.py.in Tue Mar 03 15:21:00 2015 +0000
@@ -5,7 +5,7 @@
ffi_platforms = {
'MIPS_IRIX': ['src/mips/ffi.c', 'src/mips/o32.S', 'src/mips/n32.S'],
- 'MIPS_LINUX': ['src/mips/ffi.c', 'src/mips/o32.S'],
+ 'MIPS_LINUX': ['src/mips/ffi.c', 'src/mips/o32.S', 'src/mips/n32.S'],
'X86': ['src/x86/ffi.c', 'src/x86/sysv.S', 'src/x86/win32.S'],
'X86_FREEBSD': ['src/x86/ffi.c', 'src/x86/freebsd.S'],
'X86_WIN32': ['src/x86/ffi.c', 'src/x86/win32.S'],
讲其中 'MIPS_LINUX': ['src/mips/ffi.c', 'src/mips/o32.S'] 替换为 'MIPS_LINUX': ['src/mips/ffi.c', 'src/mips/o32.S', 'src/mips/n32.S']
1> 编译pc版本需要生成一些必要工具
cd Python-2.7.15
mkdir build-pc
cd build-pc
../configure CC=gcc CXX=g++ AR=ar RANLIB=ranlib LDFLAGS="-L/usr/lib -L/usr/lib64 -L/usr/local/lib -L/usr/local/lib64" CFLAGS="-I/usr/include -I/usr/local/include"
make
2>交叉编译mips版本
cd Python-2.7.15
mkdir build-mips
../configure --host=mips64el-linux --build=x86_64-redhat-linux --prefix=/home/chentao/work/project/Z2-KERNEL-t/rootfs/rootfs_fs/fsxxx/usr --disable-ipv6 PGEN_FOR_BUILD=../build-pc/Parse/pgen CFLAGS="-I/home/chentao/work/project/Z2-KERNEL-t/rootfs/rootfs_fs/fsxxx/usr/include " LDFLAGS=-L/home/chentao/work/project/Z2-KERNEL-t/rootfs/rootfs_fs/fsxxx/usr/lib --enable-shared
需要修改根目录下生成的setup.py
加入zlib detect_modules模块中zlib探测需要的路径:
# You can upgrade zlib to version 1.1.4 yourself by going to
# http://www.gzip.org/zlib/
inc_dirs += ["/home/chentao/work/project/Z2-KERNEL-t/rootfs/rootfs_fs/fsxxx/usr/include"] #加入zlib头文件路径
zlib_inc = find_file('zlib.h', [], inc_dirs)
have_zlib = False
if zlib_inc is not None:
zlib_h = zlib_inc[0] + '/zlib.h'
version = '"0.0.0"'
version_req = '"1.1.3"'
if host_platform == 'darwin' and is_macosx_sdk_path(zlib_h):
zlib_h = os.path.join(macosx_sdk_root(), zlib_h[1:])
fp = open(zlib_h)
while 1:
line = fp.readline()
if not line:
break
if line.startswith('#define ZLIB_VERSION'):
version = line.split()[2]
break
#if version >= version_req: #由于我的zlib版本为1.2.1.2已经大于1.1.3故降这里注释
lib_dirs += ['/home/chentao/work/code/zlib-1.2.1.2/_INSTALL/lib']
print(lib_dirs)
if (self.compiler.find_library_file(lib_dirs, 'z')):
if host_platform == "darwin":
zlib_extra_link_args = ('-Wl,-search_paths_first',)
else:
zlib_extra_link_args = ()
exts.append( Extension('zlib', ['zlibmodule.c'],
libraries = ['z'],
extra_link_args = zlib_extra_link_args))
have_zlib = True
else:
missing.append('zlib')
#此处注释与上面版本判断相对应
#else:
# missing.append('zlib')
else:
missing.append('zlib')
主要是加入头文件的路径。以及由于版本为1.2.1了已经满足了1.1.3所以讲版本判断也注释掉
sqlite3的模块探测也要加入,如下
# We hunt for #define SQLITE_VERSION "n.n.n"
# We need to find >= sqlite version 3.0.8
sqlite_incdir = sqlite_libdir = None
sqlite_inc_paths = [ '/usr/include',
'/usr/include/sqlite',
'/usr/include/sqlite3',
'/usr/local/include',
'/usr/local/include/sqlite',
'/usr/local/include/sqlite3',
]
if cross_compiling:
sqlite_inc_paths = ['/home/chentao/work/project/Z2-KERNEL-t/rootfs/rootfs_fs/fsxxx/usr/include']
MIN_SQLITE_VERSION_NUMBER = (3, 0, 8)
此处主要是再cross_compiling里面加入sqlite的头文件路径
make
make install
完成手工。。。