平台相关信息:
toolchain: /opt/ti-processor-sdk-linux-rt-am335x-evm-04.03.00.05/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf-gcc
Python version : Python-3.8.6
build platform : ubuntu18.04
下载 python 源码
wget https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tar.xz
tar xvf Python-3.8.6.tar.xz
cd Python-3.8.6
如果你的PC 中的python 版本不是 python3.8.6 ,需要先编译 x86 版本的python
mkdir build.pc; cd build.pc; ../configure --enable-optimizations; make
将编译的PC版本安装的本地PC,为了不影响PC上原来python的使用,此处直接使用软链接的形式完成安装,
ln -sf $(PWD)/python3.8 /usr/bin/python
交叉编译
mkdir build.arm
../configure \
--prefix=$PWD/_install \
--host=arm-linux-gnueabihf \
--build=arm \
--target=arm-linux-gnueabihf \
--enable-shared \
--enable-ipv6 \
ac_cv_file__dev_ptmx=0 \
ac_cv_file__dev_ptc=0 \
--enable-optimizations
make -j
编译后会有报错:
Failed to build these modules:
_ctypes
出现这个问题 ,可能有两个原因,一个是 工具链里没有安装 libffi , 另一个是 python3.8.6 对 交叉编译这块兼容性不太好,直接查阅 configure 文件,修改如下

make -j
make install
make 成功!
但是安装的时候出现
看了下Makefile ,下面的都可以执行成功,就可以了
make bininstall
make libinstall
make inclinstall
看了下编译出来的文件 有162M ,在嵌入式设备上运行还是挺大的

裁剪一下 binary 文件
arm-linux-gnueabihf-strip lib/libpython3.*
差不多少了10M 左右

找到其余的 so 文件,继续裁剪

如果想继续裁剪,那就需要移除 不需要的库了 比如 test 占了 64M ,如果用不到,就可以删除了

最终裁剪之后是81M

完工!
---------------
测试与安装
# tar zcf python3.8.6.tar.gz *
# ls
bin include lib python3.8.6.tar.gz share
# scp python3.8.6.tar.gz root@192.168.172.173:/home/root
到 ARM 开发版上,测试成功
root@adam3600:~# tar xvf python3.8.6.tar.gz -C /usr
root@adam3600:~# python3
Python 3.8.6 (default, Jan 13 2021, 14:09:59)
[GCC 6.2.1 20161016] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>>
本文介绍在ARM平台进行Python交叉编译与裁剪的过程。先给出平台相关信息,下载Python源码,编译x86版本并安装到本地。交叉编译时遇到_ctypes模块编译失败问题并解决,安装时也有状况。编译文件较大,通过裁剪binary文件、so文件及移除不需要的库,最终将文件从162M减至81M,最后在ARM开发板测试成功。
4181

被折叠的 条评论
为什么被折叠?



