logo资料库

python和它的第三方库交叉编译过程.docx

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
一.准备工作: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 >>>
分享到:
收藏