pythonはARMにクロスコンパイル


1.クロスコンパイルには、pc版pythonをコンパイルしてarmをコンパイルし、構文解析器を生成する必要があります.
./configure

make Parser/pgen

2.構成とコンパイル
export CC=arm-openwrt-linux-gcc

./configure --host=arm-openwrt-linux --prefix=/home/fs/my_work/Python-3.7.4/python3.7_arm --enable-shared --disable-ipv6 --build=i686

--build=i 686:i 686はubuntuコンパイル環境
--host=arm-openwrt-linux:arm-openwrt-linuxクロスコンパイラ名
 
3.setupを修正する.py
detect_modules関数:
関数の最初の2行は/usr/localを検索ディレクトリに追加します.私たちのcross compilerは一般的に/usr/localに直接インストールされません.そのため、この2行は削除されます.
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
 
4.その後、Makefileを変更します.
(1)把
OPT= -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes
行の中で、-gを取り除いて、私達はdebug pythonを要らないで、-O 3は-O 2に変えて、空間の緊張したO 2はできます.
makeコンパイルの実行
make

 
5.. makeにエラーが発生します
Include/pyport.h:243: error: #error "This platform's pyconfig.h needs to define PY_FORMAT_LONG_LONG"
pyconfigを変更する.h:undef PYを見つけるFORMAT_LONG_LONG箇所プラス:#define PY_FORMAT_LONG_LONG "ll"
make test

make install

 
6.この時点で開発ボードに.pythonは実行できます.
 
7.環境変数の設定
python実行ファイルcopyをボード/binディレクトリの下に設定し、対応するライブラリcopyをボード/libの下に設定します.
 
以下はコンパイルで発生したその他の問題です.参考までにしてください.
問題1:
configure: error: set ac_cv_file__dev_ptmx to yes/no in your CONFIG_SITE file when cross compiling the workaround:
1. create config.site file with the following lines
ac_cv_file__dev_ptmx=no
ac_cv_file__dev_ptc=no
2. run configure script as: CONFIG_SITE=config.site ./configure --host..
または
export CONFIG_SITE=config.site

./configure --host..

 
問題2:
mips-openwrt-linux-uclibc-g++.bin: environment variable "STAGING_DIR"not defined
そしてstaging_dirは環境変数に加えればよい.
export STAGING_DIR=~/Downloads/OpenWrt-SDK-atheros-for-Linux-i686-gcc-4.3.3+cs_uClibc-0.9.30.1/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/bin:$STAGING_DIR