Python3交叉编译步骤(二)-三方库的交叉编译


一.项目场景
在cortex-A9主板上运行python3,能够使用常用的三方库
二.配置
主机环境:ubuntu-18.04-x86_64(虚拟机)
交叉编译链:arm-linux-gnueabihf-gcc
开发板:cortex-A9(armv7l)


三.安装交叉编译器
安装编译器
拷贝编译链压缩包到虚拟机中的Documents目录,CD到该目录然后执行tar -xvf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz 得到gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf

 

 

 


配置环境变量
Cd到/home/用户/目录vim .bashrc,编辑终端的配置文件,将交叉编译工具加入环境变量
export PATH=$PATH:/home/h5000/Documents/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin保存并退出,.bashrc,重新启动终端,输入arm-linux-gnueabihf-gcc -v测试交叉编译工具,出现下图则配置成功

 

 

 


四 下载python
新建一个文件夹,虚拟机联网:在命令行中输入:wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
下载成功后开始解压
或者直接拷贝相应的源码Python-3.6.9.tar.xz到ubuntu解压
Cd到安装包目录执行以下命令:
1. tar -xvf Python-3.6.9.tar.xz

 

 

 

 

 

 


五.安装相关环境依赖
使用下面的命令进行安装编译所需要的依赖
1. sudo apt-get install openssl
2. sudo apt-get install libssl-dev
3. sudo apt-get install gcc make cmake –y
4. sudo apt-get update
六.三方库安装

zlib必备安装库
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -xvf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
CC=arm-linux-gnueabihf-gcc./configure--prefix=$HOME/my_python/install/arm/
make && make install

openssl对于需要用到https场景需要安装该库
wget https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_1_1_1d.tar.gz
tar -xvf OpenSSL_1_1_1d.tar.gz
cd openssl-OpenSSL_1_1_1d/
./config no-asm --prefix=$HOME/my_python/install/arm/ --cross-compile-prefix=arm-linux-gnueabihf-
#这里主要解决报错:error: unrecognized command line option ‘-m64’
vi Makefile
#删除 -m64
make && make install

libffi对于需要用到_ctypes模块需要安装该库
wget https://github.com/libffi/libffi/archive/refs/tags/v3.2.1.tar.gz
tar -xvf libffi-3.2.1.tar.gz
cd libffi-3.2.1/
CC=arm-linux-gnueabihf-gcc ./configure --host=arm-linux-gnueabihf --prefix=$HOME/my_python/install/arm/
make && make install

cd Python-3.6.9/
1.开启zlib依赖
>vi Modules/Setup
>#开放这一句取消注释
>zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib –lz

 

 

 


2.开启openssl依赖
vi Modules/Setup
#开放这一句取消注释
SSL=$(prefix)
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl –lcrypto

 

 

 

3. 开启libffi依赖
export PKG_CONFIG_PATH=/home/my_python/install/arm/lib/pkgconfig:$PKG_CONFIG_PATH

 

 



4 . python库添加
arm系统安装python没办法直接利用pip进行库安装,这时候需要利用虚拟机上进行pc的库安装将安装好的库移植的lib目录下。
具体安装目录:
#将需要安装的库在虚拟机中pip install XX 后然后拷贝到目标板的site-packages目录下

 

 


七. 编译本机HOST解释器
在交叉编译的时候需要在HOST PC上运行对应版本的Python程序,所以需要先编译HOST PC上面用的Python,运行以下命令进行编译
1. cd Python-3.6.9/
2. ./configure --prefix=$PWD/../_install_host --enable-shared LDFLAGS="-L/home/h5000/my_python/install/arm/lib" CPPFLAGS="-I/home/h5000/my_python/install/arm/include"
3. make -j4
4. make install
5. make distclean
–-prefix指定的目录可自行修改,但不要放在Python-3.6.9目录里,因为后续执行make distclean会清掉一些文件。

 

 


把生成HOST PC端即install/pc目录中的bin和lib,加到环境变量里面去,此处的地址为install/pc我的地址是:my_python/install/pc后续交叉编译就会自动找到python3了,其指令如下:
sudo gedit ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/h5000/my_python/install/pc/lib
export PATH=$PATH:/home/h5000/my_python/install/pc/bin输入以上指令后,重启命令窗口输入python3 指令 如图2.2所示:

 

 


至此,本机已经编译完成
接下来编译目标板(arm板)
八. 配置交叉编译工具链
这里采用的是arm-linux-gnueabihf交叉编译工具链
/home/h5000/Documents/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf-gcc
配置交叉编译工具链命令如下:
1. cd Python-3.6.9/
2. CC=arm-linux-gnueabihf-gcc \
3. CXX=arm-linux-gnueabihf-g++ \
4. AR=arm-linux-gnueabihf-ar \
5. RANLIB=arm-linux-gnueabihf-ranlib \
6. STRIP=arm-linux-gnueabihf-strip \
7. ./configure --host=arm-linux-gnueabihf --prefix=$HOME/my_python/install/arm/ \
8. --build=x86_64-linux-gnu \
9. --with-system-ffi \
10. --disable-ipv6 \
11. ac_cv_file__dev_ptmx=no \
12. ac_cv_file__dev_ptc=no
–host是交叉编译工具链,–build表示编译出来的程序运行的处理器,–prefix表示安装目录。
配置交叉编译链后,把/home/h5000/my_python/install/arm 中交叉编译生成的include,lib拷贝到交叉编译工具链的include,lib目录中

九. 目标板编译安装
在Python-3.6.9目录中,运行以下命令
1. make -j 4 && make install

 

 


若出现报错:subprocess.CalledProcessError: Command ‘(‘lsb_release’, ‘-a’)’ returned non-zero exit status 1.

 

 


执行以下命令后重新make install即可
1. sudo rm -rf /usr/bin/lsb_release
2. make install

 

 


编译成功后在$HOME/my_python/install/arm/目录下生成bin,include,lib,share,ssl四个文件夹,如图所示

 

 


十. 移植到开发板并测试
将交叉编译出来的arm目录压缩打包拷贝到目标板,然后解压,
1. tar -xvf _install
2. cd /usr/bin/
3. mkdir python
4. cd _install
5. cp -r bin /usr/bin/python
6. cp -r include /usr/bin/python
7. cp -r lib/usr/bin/python
8. cp -r share /usr/bin/python
然后把解压出来的bin,include,lib,share,ssl五个文件夹复制到python目录中

 

 


然后配置开发板的环境变量,把python加入环境变量中
输入vi ~/.bashrc
添加:export PYTHONPATH="/yourpath/:$PYTHONPATH"
执行source ~/.bashrc使修改立即生效

 

 


保存后输入python3查看

 

 


导入对应模块验证:

 

 

至此,python3和三方库zlib交叉编译移植已完成

 

posted @ 2022-09-22 16:00  秀才哥哥  阅读(2476)  评论(6编辑  收藏  举报