python - 在 Linux 上交叉编译 Python 3.5.2 for ARM 时如何编译缺失的扩展模块

标签 python python-3.x arm cross-compiling embedded-linux

当为 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/

相关文章:

python - 删除 Django-Storages S3 中的默认文件名

python - 如何在 Python 3(跨平台)中打印到操作系统的默认打印机?

交叉编译的二进制文件不存在?

python - 如何合并两个Python字典?

python - SQLAlchemy 左联接 WHERE 子句被转换为零和一

python - 在 Pygame 中缩放图像/矩形

python - 即使使用流 api 后,也无法在 Python 中使用 kubernetes-cli 在 pod 中执行

Mac M1 上的 Docker 给出 : "The requested image' s platform (linux/amd64) does not match the detected host platform"

linux - 为 Linux 上的裸机 ARM 准备 GNU 工具链

python - python中pass语句和3个点(...)之间的区别