当为 ARM 交叉编译 Python 时,许多扩展模块都没有构建。在 Linux 上交叉编译适用于 ARM 的 Python 3.5.2 时,如何构建缺少的扩展模块(主要是数学、选择、套接字)?但是,在针对 native 平台进行编译时,扩展模块会正确构建。
这些是我的交叉编译步骤:
CONFIG_SITE=config.site CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ AR=arm-linux-gnueabihf-ar RANLIB=arm-linux-gnueabihf-ranlib READELF=arm-linux-gnueabihf-readelf ./configure --enable-shared --host=arm-linux --build=x86_64-linux-gnu --disable-ipv6 --prefix=/opt/python3
make
sudo PATH=/home/benny/workspace/projects/webshield/src/dntl_ws/sw/toolchain/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin:$PATH make install
这些是交叉编译时构建的模块:
_ctypes_test
cmath
_json
_testcapi
_testbuffer
_testimportmultiple
_testmultiphase
_lsprof
_opcode
parser
mmap
audioop
_crypt
_csv
termios
resource
nis
_multibytecodec
_codecs_kr
_codecs_jp
_codecs_cn
_codecs_tw
_codecs_hk
_codecs_iso2022
_decimal
_multiprocessing
ossaudiodev
xxlimited
_ctypes
以下是 x86 机器上的编译步骤:
CONFIG_SITE=config.site ./configure --enable-shared --disable-ipv6 --prefix=/opt/python3
make
sudo make install
这些是 native 编译时构建的模块:
_struct
_ctypes_test
array
cmath
math
_datetime
_random
_bisect
_heapq
_pickle
_json
_testcapi
_testbuffer
_testimportmultiple
_testmultiphase
_lsprof
unicodedata
_opcode
fcntl
grp
spwd
select
parser
mmap
syslog
audioop
readline
_crypt
_csv
_posixsubprocess
_socket
_sha256
_sha512
_md5
_sha1
termios
resource
nis
binascii
pyexpat
_elementtree
_multibytecodec
_codecs_kr
_codecs_jp
_codecs_cn
_codecs_tw
_codecs_hk
_codecs_iso2022
_decimal
_multiprocessing
ossaudiodev
xxlimited
_ctypes
我还尝试在 ARM 计算机上本地构建 ARM,并且扩展已成功构建。
交叉编译使用的工具链为:
gcc version 4.9.4 20151028 (prerelease) (Linaro GCC 4.9-2016.02)
我的主机是:
Ubuntu 16.04.1 LTS
Linux whachamacallit 4.4.0-42-generic #62-Ubuntu SMP Fri Oct 7 23:11:45 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
最佳答案
根本原因(由 Xavier de Gaye 提供)
There was already a native python3.5 (from the Ubuntu repository) is the PATH. So the problem is that setup.py in build_extensions() does not build the extensions that have been already built statically into this native Ubuntu interpreter. http://bugs.python.org/issue28444#msg278717
临时解决方案
A patch has been submitted at http://bugs.python.org/issue28444 and is working successfully.
关于python - 在 Linux 上交叉编译 Python 3.5.2 for ARM 时如何编译缺失的扩展模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40047363/