编译主机python

此处使用python3.9.5进行编译,将其放在我的虚拟机/root/gw200/python/目录下,解压python压缩包,然后进入其文件夹。进行以下设置后,对其进行编译。

  • 取消ssl注释 修改 Python-3.9.5/Modules/Setup 将以上四行的注释取消掉,让ssl模块编译进python,其中SSL的值要更改为openssl的实际安装目录。
SSL=/usr/local/ssl			// ssl库的安装目录

我的更改为

SSL=/usr/ssl				// ssl库的安装目录
  • 取消zlib注释 修改 Python-3.9.5/Modules/Setup, 将此行注释取消掉,让zlib模块编译进python中。
  • 编译并安装电脑python
mkdir build.pc
cd build.pc
../configure --enable-optimizations --enable-shared
make
make install

如有不明白的,请查看我的另一篇文章python3移植到嵌入式系统中(交叉编译python3),此处使用不同的python版本,交叉编译也是不同的环境。

编译嵌入式python

  • 清除电脑版程序
make clean
cd ../
mkdir build.gw200
  • 修改ssl信息 修改 Python-3.9.5/Modules/Setup 其中SSL的值为交叉编译openssl库的安装目录,其方法在前面文章,四、给arm板编译移植openssl(用于python _ssl模块)里有讲,可参考。
  • 添加zlib信息 前面编译主机版python已经取消zlib注释,此处不再做更改。 将交叉编译的zlib库文件复制到嵌入式python的安装目录(build.gw200目录)中。 复制交叉编译的zlib库文件到交叉编译工具所在目录。
cp -rfp /root/gw200/lib/zlib-1.2.11/_install/* /root/board/tools/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf
cp -rfp /root/gw200/lib/zlib-1.2.11/_install/* /root/gw200/python/Python-3.9.5/build.gw200

交叉编译zlib库,可参考此文章 五、给arm板编译移植zlib(python zlib)

  • 添加_ctypes 将交叉编译好后的libcffi库复制到交叉编译工具链库路径下和交叉编译的python安装目录中。
cp -rfp /root/gw200/lib/libffi-3.3/_install/* /root/board/tools/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf
cp -rfp /root/gw200/lib/libffi-3.3/_install/* /root/gw200/python/Python-3.9.5/build.gw200

交叉编译libcffi库,可参考此文章 六、给arm板编译移植libffi(用于python _ctypes模块)

  • 修改Makefile文件 打开Makefile文件将
OPT=            -DNDEBUG -g -fwrapv -O3 -Wall

一行中,去掉-g,我们不要debug python以节约空间

OPT=            -DNDEBUG -fwrapv -O3 -Wall
  • 编译并安装
make
make install

此时在安装目录(/root/gw200/python/Python-3.9.5/build.gw200)下会有include、share、bin和libl四个文件夹,将此文件夹复制到嵌入式系统的/usr/目录下,然后运行python3,不报错则表示移植成功。

  • 参考python3 安装ssl编译问题openssl的编译与交叉编译移植zlib与_ctypescannot find -lz collect2: error: ld returned 1 exit status解决方案