ZYNQ-Linux开发之(八)Python源码交叉编译安装以及Numpy库交叉编译安装的使用

  • Python源码交叉编译

对于zynq平台来说,zynq板卡直接编译出来的库文件格式为硬浮点型,而eclipse中引用库文件时,需要的是软浮点型,所以zynq平台开发板直接编译出来的库文件是无法在eclipse中交叉编译使用的,会提示VFP格式不对的错误。解决该问题有两种方法,一是在虚拟机中通过交叉编译工具对库源码进行交叉编译,这样编译出来的库文件为软浮点型,二是在板卡上编译,修改编译选项,把硬浮点编译改成软浮点编译,对于第二种方法而言,有些库源码的Makefile文件不支持配置软硬浮点编译,只能在虚拟机中交叉编译。同时,并不是每个平台板卡编译默认都是硬浮点编译,例如LS2088平台板卡编译出来的库文件,默认就可以直接在eclipse中调用,不会出现VFP格式错误。

Python源码交叉编译前,需要对源码先进行PC版本编译,也就是X86平台的编译。

PC版编译流程:

  1. 将源码压缩包放到任意路径,解压源码:tar -xvf Python-3.4.0.tgz
  2. 进入到源码目录:cd Python-3.4.0/
  3. 执行configure配置Makefile文件:

./configure --prefix=/home/daisy/python/python3.4pc

--prefix=后面是PCPython要安装到的路径

出现如下界面,证明Makefile文件成功生成

  1. 编译源码,执行:make

出现如下界面证明编译通过

  1. 安装PC版Python,执行:make install

ARM版交叉编译流程:

  1. 控制台依次输入如下指令:

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

  1. 执行configure配置Makefile文件:

./configure --prefix=/home/daisy/python/python34 --host=arm-xilinx-linux-gnueabi --build=x86_64-pc-linux-gnu --enable-shared --disable-ipv6

--prefix=后面是ARMPython要安装到的路径

--host=是目标平台

--build=是当前编译的平台

--enable-shared是生成.so动态库,--disable-shared是生成.a静态库

出现如下界面,证明Makefile文件成功生成

  1. 清除PC版编译的文件,执行:make clean
  2. 编译源码,执行:make

出现如下界面证明编译通过

  1. 安装ARM版Python,执行:make install

对于3.4.0版本,安装后会出现如下的错误,主要是因为3.4版本不带pip,高版本的话自带pip工具,不会报错,该报错不用理会。

  1. 编译成功后,安装目录下会出现如下四个文件夹:

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版编译流程一样。

  1. 解压numpy源码:tar –xvf numpy-1.8.1.tar.gz
  2. 进入到numpy源码路径:cd numpy-1.8.1/
  3. 通过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库相关内容。

  1. 验证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源码:

  1. 将源码压缩包放到任意路径,解压源码:tar -xvf Python-3.4.0.tgz
  2. 进入到源码目录:cd Python-3.4.0/
  3. 执行configure配置Makefile文件:

./configure --prefix=/home/analog/python3.4

--prefix=后面是Python要安装到的路径

出现如下界面,证明Makefile文件成功生成

  1. 编译源码,执行:make

出现如下界面证明编译通过

  1. 安装Python,执行:make install

安装numpy库:

  1. 解压numpy源码:tar –xvf numpy-1.8.1.tar.gz
  2. 进入到numpy源码路径:cd numpy-1.8.1/
  3. 通过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库相关内容。

  1. 验证numpy库安装是否成功:

进入到Python安装目录bin文件夹下:cd python3.4pc/bin

启动Python程序:./python3.4

加载numpy库:import numpy

出现如上图所示的内容,没有报错的话,就证明numpy库被加载进来了。

  • 切换默认启动python版本的方法
  1. 开发板切换Python默认版本

系统启动会默认调用/usr/bin/目录下的python软链接,只需要将该软连接指向不同版本的Python可执行程序即可,例如:

ln -s /home/analog/python3.4/bin/python3.4 ./python

这样就创建了软链接,需要注意的是,创建前要把之前存在的软链接删除,并且需要给可执行程序运行的权限。

  1. 虚拟机切换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

猜你喜欢

转载自blog.csdn.net/qq_38584212/article/details/132041971
今日推荐