- Python源码交叉编译
对于zynq平台来说,zynq板卡直接编译出来的库文件格式为硬浮点型,而eclipse中引用库文件时,需要的是软浮点型,所以zynq平台开发板直接编译出来的库文件是无法在eclipse中交叉编译使用的,会提示VFP格式不对的错误。解决该问题有两种方法,一是在虚拟机中通过交叉编译工具对库源码进行交叉编译,这样编译出来的库文件为软浮点型,二是在板卡上编译,修改编译选项,把硬浮点编译改成软浮点编译,对于第二种方法而言,有些库源码的Makefile文件不支持配置软硬浮点编译,只能在虚拟机中交叉编译。同时,并不是每个平台板卡编译默认都是硬浮点编译,例如LS2088平台板卡编译出来的库文件,默认就可以直接在eclipse中调用,不会出现VFP格式错误。
Python源码交叉编译前,需要对源码先进行PC版本编译,也就是X86平台的编译。
PC版编译流程:
- 将源码压缩包放到任意路径,解压源码:tar -xvf Python-3.4.0.tgz
- 进入到源码目录:cd Python-3.4.0/
- 执行configure配置Makefile文件:
./configure --prefix=/home/daisy/python/python3.4pc
--prefix=后面是PC版Python要安装到的路径
出现如下界面,证明Makefile文件成功生成
- 编译源码,执行:make
出现如下界面证明编译通过
- 安装PC版Python,执行:make install
ARM版交叉编译流程:
- 控制台依次输入如下指令:
echo ac_cv_file__dev_ptmx=yes > config.site
echo ac_cv_file__dev_ptc=yes >> config.site
export CONFIG_SITE=config.site
export CXX=arm-xilinx-linux-gnueabi-g++
export CC=arm-xilinx-linux-gnueabi-gcc
- 执行configure配置Makefile文件:
./configure --prefix=/home/daisy/python/python34 --host=arm-xilinx-linux-gnueabi --build=x86_64-pc-linux-gnu --enable-shared --disable-ipv6
--prefix=后面是ARM版Python要安装到的路径
--host=是目标平台
--build=是当前编译的平台
--enable-shared是生成.so动态库,--disable-shared是生成.a静态库
出现如下界面,证明Makefile文件成功生成
- 清除PC版编译的文件,执行:make clean
- 编译源码,执行:make
出现如下界面证明编译通过
- 安装ARM版Python,执行:make install
对于3.4.0版本,安装后会出现如下的错误,主要是因为3.4版本不带pip,高版本的话自带pip工具,不会报错,该报错不用理会。
- 编译成功后,安装目录下会出现如下四个文件夹:
bin:python可执行程序
include:python接口函数头文件
lib:python接口函数库(.a和.so)
share:交叉编译用不到
至此代码中引用python接口函数所需的文件都已经编译好了。
- 安装numpy库
对于交叉编译使用的numpy库来说,只需要numpy文件夹下的.h文件,所以eclipse中调用的numpy库并不需要交叉编译,.h文件不分平台,可以直接将zynq根文件系统中/usr/lib/python3/dist-packages/numpy/core/include/numpy文件夹拷贝出来放到虚拟机中使用,也可以手动安装X86平台的numpy库或者安装ARM平台下的numpy库,然后将python安装目录下对应的
lib/python3.4/site-packages/numpy/core/include/numpy文件夹拷贝出来使用也可以,不过C++交叉编译出来的可执行程序,所运行的板卡或者平台上面,一定要安装了numpy库,并且是可加载可使用的,因为交叉编译的程序依赖于所运行平台上的numpy库使用。下面首先说明X86平台安装numpy库的方法。
X86平台安装numpy库:
安装numpy库之前,需要先安装Python,步骤与上面第一部分中PC版编译流程一样。
- 解压numpy源码:tar –xvf numpy-1.8.1.tar.gz
- 进入到numpy源码路径:cd numpy-1.8.1/
- 通过Python安装numpy库,执行指令:
../python3.4pc/bin/python3.4 setup.py install
其中../python3.4pc/bin/python3.4是PC版Python安装的路径,需要调用Python可执行程序来安装numpy库,安装成功后,会在Python安装目录的lib/python3.4pc/site-packages/下生成numpy库相关内容。
- 验证numpy库安装是否成功:
进入到Python安装目录bin文件夹下:cd python3.4pc/bin
启动Python程序:./python3.4
加载numpy库:import numpy
出现如上图所示的内容,没有报错的话,就证明numpy库被加载进来了。
需要注意的是,Python版本需要与numpy版本对应,如果版本不对应,numpy库是无法使用的,官网上numpy库有对应描述,例如写有cp34的,就是可以对应Python3.4版本,如果是高版本的Python且设备联网的话,可以直接使用pip工具安装numpy库,默认就是当前Python适用的numpy库版本。
- 开发板ARM平台直接编译Python以及numpy库
开发板直接编译Python源码与PC端编译方式一致,没有交叉编译工具,编译平台,目标平台等配置,直接gcc编译即可,开发板编译很慢,大概需要半个多小时。
安装Python源码:
- 将源码压缩包放到任意路径,解压源码:tar -xvf Python-3.4.0.tgz
- 进入到源码目录:cd Python-3.4.0/
- 执行configure配置Makefile文件:
./configure --prefix=/home/analog/python3.4
--prefix=后面是Python要安装到的路径
出现如下界面,证明Makefile文件成功生成
- 编译源码,执行:make
出现如下界面证明编译通过
- 安装Python,执行:make install
安装numpy库:
- 解压numpy源码:tar –xvf numpy-1.8.1.tar.gz
- 进入到numpy源码路径:cd numpy-1.8.1/
- 通过Python安装numpy库,执行指令:
../python3.4/bin/python3.4 setup.py install
其中../python3.4/bin/python3.4是Python安装的路径,需要调用Python可执行程序来安装numpy库,安装成功后,会在Python安装目录的lib/python3.4/site-packages/下生成numpy库相关内容。
- 验证numpy库安装是否成功:
进入到Python安装目录bin文件夹下:cd python3.4pc/bin
启动Python程序:./python3.4
加载numpy库:import numpy
出现如上图所示的内容,没有报错的话,就证明numpy库被加载进来了。
- 切换默认启动python版本的方法
- 开发板切换Python默认版本
系统启动会默认调用/usr/bin/目录下的python软链接,只需要将该软连接指向不同版本的Python可执行程序即可,例如:
ln -s /home/analog/python3.4/bin/python3.4 ./python
这样就创建了软链接,需要注意的是,创建前要把之前存在的软链接删除,并且需要给可执行程序运行的权限。
- 虚拟机切换Python默认版本
如果虚拟机中没有安装anaconda,那么切换方法与开发板切换一样,如果安装了anaconda,需要修改用户文件夹下的. bashrc文件,打开文件找到最后,将该部分注释掉,打开命令窗口,执行:source ~/.bashrc(或取重启虚拟机),就关掉了anaconda的Python,就可以通过修改/usr/bin/下的Python软链接来切换版本了。
查看.a静态库中内容:
ar -t python3.4m.a
打包静态库:
ar -cvr python3.4m.a *.o
打包动态库:
gcc -shared -o python3.4m.so python.o
gcc -shared -o libhiredis.so alloc.o net.o hiredis.o sds.o async.o read.o sockcompat.o