一.准备工作:pc 版的 python 和第三方库
Ubuntu 环境如下:
root@cwf-virtual-machine:/cwf/ccc/python# ls -al /usr/bin/gcc
lrwxrwxrwx 1 root root 7 Dec
8 11:44 /usr/bin/gcc -> gcc-4.6
root@cwf-virtual-machine:/cwf/ccc/python# ls -al /usr/bin/g++
lrwxrwxrwx 1 root root 7 Mar 14 2012 /usr/bin/g++ -> g++-4.6
root@cwf-virtual-machine:/cwf/ccc/python# ls -al /usr/bin/gfortran
lrwxrwxrwx 1 root root 12 Mar 14 2012 /usr/bin/gfortran -> gfortran-4.6
root@cwf-virtual-machine:/cwf/ccc/python#
bzip2 库 pc 版:
1. cd bzip2-1.0.6/
2. make
3. make install PREFIX=/cwf/ccc/python/pc_pythoninstall
编译 pc 版 python:
1. cd /cwf/ccc/python/pc_pythoninstall/Python-2.7.10
2. ./configure --prefix=/cwf/ccc/python/pc_pythoninstall
3.make
4.make install
5. 验证 bz2
/cwf/ccc/python/pc_pythoninstall/bin/python
>>> import bz2
>>>
用以上 python 编译 pc 版的第三方库:
Numpy 库:
Numpy 目录下:
/cwf/ccc/python/pc_pythoninstall/bin/python setup.py config_fc --help-fcompiler
/cwf/ccc/python/numpy/numpy-1.10.0/numpy/distutils/fcompiler# vi gnu.py
1. cd numpy-1.10.0
2. cd /cwf/ccc/python/numpy/numpy-1.10.0/numpy/distutils/fcompiler
Vi gun.py
def get_flags_opt(self): 下
opt = ['-O2 -march=x86-64 -DMS_WIN64 -mtune=generic -msse2']
改为
opt = ['-O2']
3. /cwf/ccc/python/pc_pythoninstall/bin/python setup.py config_fc --help-fcompiler
setup.py
install
setup.py
install
setup.py
install
setup.py
install
/cwf/ccc/python/pc_pythoninstall/bin/python
4.
--prefix=/cwf/ccc/python/pc_pythoninstall
5.验证
/cwf/ccc/python/pc_pythoninstall/bin/python
>>> import numpy
>>>
/cwf/ccc/python/pc_pythoninstall/bin/python
zope 库:
1. cd zope.interface-3.8.0
2.
--prefix=/cwf/ccc/python/pc_pythoninstall
3.验证
/cwf/ccc/python/pc_pythoninstall/bin/python
>>> import zope
>>>
/cwf/ccc/python/pc_pythoninstall/bin/python
Twisted 库:
1. cd Twisted-15.2.1
2.
--prefix=/cwf/ccc/python/pc_pythoninstall
3. 验证
/cwf/ccc/python/pc_pythoninstall/bin/python
>>> import twisted
>>>
/cwf/ccc/python/pc_pythoninstall/bin/python
Setuptools 库:
1. cd setuptools-0.6c11
2.
--prefix=/cwf/ccc/python/pc_pythoninstall
3. 验证
/cwf/ccc/python/pc_pythoninstall/bin/python
>>> import setuptools
>>>
Lapack 库:
1. cd lapack-3.6.1
2. cp make.inc.example make.inc
3. 编辑 makefile
lib: lapacklib tmglib
#lib: blaslib variants lapacklib tmglib
改为:
#lib: lapacklib tmglib
lib: blaslib variants lapacklib tmglib
4. make blaslib
5. make lapacklib
6. cp liblapack.a librefblas.a /cwf/ccc/python/pc_pythoninstall/lib/
/cwf/ccc/python/pc_pythoninstall/bin/python
Scipy 库:
1. export BLAS=/cwf/ccc/python/pc_pythoninstall/lib/librefblas.a
2. export LAPACK=/cwf/ccc/python/pc_pythoninstall/lib/liblapack.a
3.
--prefix=/cwf/ccc/python/pc_pythoninstall
4. 验证
/cwf/ccc/python/pc_pythoninstall/bin/python
>>> import scipy.io as io
>>>
setup.py
install
Scikit 库:
1. cd scikit-learn-0.18.1
2. /cwf/ccc/python/pc_pythoninstall/bin/python
--prefix=/cwf/ccc/python/pc_pythoninstall
3. 验证
/cwf/ccc/python/pc_pythoninstall/bin/python
>>> import sklearn
>>>
setup.py
install
二.交叉编译第三方库
将 g++、gcc、gfortran 建立软链接:(采用括号内的此种方法,只有 CC 生效,其它的工具
链均没有生效,所以最后还是采用软链接的方式,在交叉编译完之后再把软链接改过来
CC=arm-linux-gnueabihf-gcc
CXX=arm-linux-gnueabihf-g++
AR=arm-linux-gnueabihf-ar
RANLIB=arm-linux-gnueabihf-ranlib
FORTRAN=arm-linux-gnueabihf-gfortran
export CC="arm-linux-gnueabihf-gcc -pthread"
export LDSHARED="${CC} -shared"
)
未建立时:
root@cwf-virtual-machine:/usr/bin# ls -al gcc
lrwxrwxrwx 1 root root 7 Dec
root@cwf-virtual-machine:/usr/bin# ls -al g++
lrwxrwxrwx 1 root root 7 Mar 14 2012 g++ -> g++-4.6
root@cwf-virtual-machine:/usr/bin# ls -al gfortran
lrwxrwxrwx 1 root root 12 Mar 14 2012 gfortran -> gfortran-4.6
8 11:44 gcc -> gcc-4.6
建立后:
ln
ln
-s
-s
1
1
root
90
Dec
21
gcc
->
root
09:05
root@cwf-virtual-machine:/usr/bin# rm gcc
root@cwf-virtual-machine:/usr/bin#
/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-gcc
gcc
root@cwf-virtual-machine:/usr/bin# ls -al gcc
lrwxrwxrwx
/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-gcc
root@cwf-virtual-machine:/usr/bin#
root@cwf-virtual-machine:/usr/bin# rm g++
root@cwf-virtual-machine:/usr/bin#
/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-g++
g++
root@cwf-virtual-machine:/usr/bin# ls -al g++
lrwxrwxrwx
/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-g++
root@cwf-virtual-machine:/usr/bin#
root@cwf-virtual-machine:/usr/bin# rm gfortran
rm: cannot remove `gfortran': No such file or directory
root@cwf-virtual-machine:/usr/bin#
-s
/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-gfortr
an gfortran
root@cwf-virtual-machine:/usr/bin# ls -al gfortran
->
lrwxrwxrwx
/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-gfortr
an
root@cwf-virtual-machine:/usr/bin#
gfortran
root
root
09:06
root
95
Dec
21
09:07
root
90
Dec
g++
->
ln
21
1
用以上生成的 pc 版 python 编译第三方库(用 Ubuntu 自带的会因版本不匹配出现很多问题),
所有第三方库都重新解压:
1. 删除原文件系统/lib/下的 python2.7、pkgconfig、libpython2.7.so*等 python 相关的文件和
目录
2. 删除原文件系统/bin 下 python2.7、python2.7-config 等 python 相关的文件和目录
2. 将 原 文 件 系 统 中 /lib/python2.7/lib/python2.7/site-packages 目 录 下 的 _markerlib 、
easy-install.pth 、 easy_install.pyc 、 google 、 pkg_resources 拷 贝 到 文 件 系 统 的
/lib/python2.7/site-packages 目录下。
3. 将工具链中的 libgfortran.so.3*拷贝到文件系统的/lib 目录下。
交叉编译 bzip2 库:
1. cd bzip2-1.0.6/
2. 修改 Makefile,将 gcc,g++,ar,ranlib,gfortran 修改为带前缀 arm-linux-gnueabihf-(建
立了软链接,此处可以不用修改)
all: libbz2.a bzip2 bzip2recover test
CFLAGS=-Wall -Winline -O2 -g $(BIGFILES)
修改为:
all: libbz2.a bzip2 bzip2recover
CFLAGS=-Wall -Winline -fPIC -O2 -g $(BIGFILES)
3. make
4. make install PREFIX=/home/nfs-share/bz
交叉编译 sqlite(应该不需要)
http://www.cnblogs.com/hit-python/articles/4081673.html
编译 arm 版 python:
1. cd /cwf/ccc/python/Python-2.7.10
2.
3. 编译 pc 版的 python 和 Parser/pgen (工具链设为 pc 版)
./configure
make python Parser/pgen
mv python hostpython
mv Parser/pgen Parser/hostpgen
--host=arm-linux-gnueabihf
--prefix=/home/nfs-share/bz LDFLAGS=-lpthread
4. 工具链修改为交叉编译版
5. make distclean
6. ./configure
-enable-shared --build=arm --disable-ipv6 ac_cv_file__dev_ptmx=0 ac_cv_file__dev_ptc=0
7. make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen
8. Make -i install
9. make distclean
10.
./configure
LDFLAGS=-lpthread
ac_cv_file__dev_ptc=0
11. make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen
12. Make -i install
13.
/home/nfs-share/python1/lib/python2.7/lib-dynload/
--build=arm --disable-ipv6
--host=arm-linux-gnueabihf
-enable-shared
--prefix=/home/nfs-share/python1
ac_cv_file__dev_ptmx=0
cp
/home/nfs-share/bz/lib/python2.7/lib-dynload/bz2.so
mv
14. 使 用 arm-linux-gnueabihf-strip 对 bin 和 lib 目 录 下 的 可 执 行 文 件 和 库 文 件 进 行 瘦 身
(delPyCompile.py 使 py 变成 pyc 等)
15.
/home/nfs-share/python1/lib/python2.7/
16. 将/home/nfs-share/python1 的 bin 和 lib 目录拷贝到文件系统的相应位置
17. 将/lib/python2.7/lib-dynload 目录下的文件剪切到上一级目录,及/lib/python2.7/
18. 验证 bz2
/cwf/ccc/python/pc_pythoninstall/bin/python
/home/nfs-share/python1/lib/python2.7/lib-dynload/*
>>> import bz2
>>>
Numpy 库:
Numpy 目录下:
1. cd numpy-1.10.0
2.查看/cwf/ccc/python/pc_pythoninstall/bin/python setup.py config_fc --help-fcompiler
3.修改/cwf/ccc/python/numpy/numpy-1.10.0/numpy/distutils/fcompiler# vi gnu.py
def get_flags_opt(self): 下
opt = ['-O2 -march=x86-64 -DMS_WIN64 -mtune=generic -msse2']
改为
opt = ['-O2']
4. /cwf/ccc/python/pc_pythoninstall/bin/python setup.py install
5. 将/cwf/ccc/python/pc_pythoninstall/lib/python2.7/site-packages 目录下
numpy/和 numpy-1.10.0-py2.7.egg-info 拷贝到文件系统/lib/python2.7/site-packages/目录下
6.验证
python
>>> import numpy
>>>
zope 库:
1. cd zope.interface-3.8.0
2. /cwf/ccc/python/pc_pythoninstall/bin/python setup.py install
3. 将/cwf/ccc/python/pc_pythoninstall/lib/python2.7/site-packages 目录下
zope 和 zope.interface-3.8.0-py2.7-linux-i686.egg/拷贝到文件系统/lib/python2.7/site-packages/
目录下
4.验证
python
>>> import zope
>>>
Twisted 库:
1. cd Twisted-15.2.1
2. /cwf/ccc/python/pc_pythoninstall/bin/python setup.py install
3. 将/cwf/ccc/python/pc_pythoninstall/lib/python2.7/site-packages 目录下
twisted 和 Twisted-15.2.1-py2.7.egg-info 拷贝到文件系统/lib/python2.7/site-packages/目录下
4 验证
python
>>> import twisted
>>>
Lapack 库:
1. cd lapack-3.6.1
2. cp make.inc.example make.inc
3. 编辑 make.inc
= -O2 -frecursive
= -O0 -frecursive
将 gcc,g++,ar,ranlib,gfortran 修改为带前缀 arm-linux-gnueabihf-
CFLAGS = -O3
OPTS
NOOPT
改为:
CFLAGS = -O3 -fPIC
OPTS
NOOPT
= -O2 -frecursive -fPIC
= -O0 -frecursive -fPIC
4. 编辑 makefile
lib: lapacklib tmglib
#lib: blaslib variants lapacklib tmglib
改为:
#lib: lapacklib tmglib
lib: blaslib variants lapacklib tmglib
lapack_install:
( cd INSTALL; $(MAKE); ./testlsame; ./testslamch; ./testdlamch; \
./testsecond; ./testdsecnd; ./testieee; ./testversion )
改为:
lapack_install:
( cd INSTALL; $(MAKE) )
5. make blaslib
6. make lapacklib
7. 将 liblapack.a 和 librefblas.a 拷贝到文件系统/lib/python2.7 目录下
Scipy 库:
1. 在交叉编译 scipy 之前将/cwf/ccc/python/pc_pythoninstall/lib/python2.7/site-packages 下的
numpy 和 numpy-1.10.0-py2.7.egg-info 还原为 pc 版
2. 将/cwf/ccc/python/pc_pythoninstall/lib/python2.7/site-packages/numpy/core/lib/ 目 录 下 的
libnpymath.a 再还原为交叉编译版
root@cwf-virtual-machine:/cwf/ccc/python/numpy-1.10.0/build/temp.linux-i686-2.7#
libnpymath.a /cwf/ccc/python/pc_pythoninstall/lib/python2.7/site-packages/numpy/core/lib/
3. cd scipy-0.18.1
4. export BLAS=/cwf/ccc/python/lapack-3.6.1/librefblas.a
cp
5. export LAPACK=/cwf/ccc/python/lapack-3.6.1/liblapack.a
6. /cwf/ccc/python/pc_pythoninstall/bin/python setup.py install
7. 将
/cwf/ccc/python/pc_pythoninstall/lib/python2.7/site-packages/scipy-0.18.1-py2.7-linux-i686.egg
目录下的 scipy 拷贝到文件系统/lib/python2.7/site-packages/目录下
8. 验证
python
>>> import scipy
>>> import scipy.io as io
>>>
Scikit 库:
4. cd scikit-learn-0.18.1
5. /cwf/ccc/python/pc_pythoninstall/bin/python
--prefix=/cwf/ccc/python/pc_pythoninstall
8. 将
/cwf/ccc/python/pc_pythoninstall/lib/python2.7/site-packages/目录下的
scikit_learn-0.18.1-py2.7.egg-info 和 sklearn 拷贝到文件系统/lib/python2.7/site-packages/目录
下
setup.py
install
6. 验证
python
>>> import sklearn
>>>