为armel交叉编译Python 2.7.16(32位)

为armel交叉编译Python 2.7.16(32位)

我有一个带有armel架构的设备,文件系统运行在VM(amd64架构)上,因为设备没有足够的空间来安装编译要求。操作系统是 Debian 9(延伸版)。

我下载 Python,创建包含以下内容的文件 config.site (在另一个答案中找到它):

ac_cv_file__dev_ptmx=no
ac_cv_file__dev_ptc=no

之后我就跑了./configure。最后有很多选项(我在不同的论坛中找到),例如:

CONFIG_SITE=config.site ./configure --target=arm-linux --host=arm-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" --build=armel --enable-ipv6

此时,我需要什么--[dis|en]able-ipv6

使用不同的设置它可以工作,如果它有效我就运行make.如果这完成了我跑

checkinstall -D --install=no --fstrans=yes

如果运行成功,我会在另一台具有armel架构的设备上安装.deb包,但如果我运行,python则会出现错误:bash: /usr/local/bin/python: cannot execute binary file。你能解释一下为什么吗?

更新 安装 Debian 软件包后,输出的file /usr/local/bin/python符号链接为/usr/local/bin/python2.7.最后的输出是:

python2.7: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped

我发现gcc使用x86-64编译是正确的吗?或者我需要改变它?如果是的话,我如何改变它?

我想了解更多有关编译的信息。请写下详细的答案和/或在答案中添加源链接。

提前谢谢了!

答案1

编译是将 C 语言等语言翻译成 CPU 指令的过程。不同的CPU有不同的指令集。可以将其视为 x86_64 与 armel 不同的 CPU 语言。

虽然技术上可以制作一个可以用任何指令集(语言)编写的编译器,但我不相信有任何可以直接切换的编译器。

因此,要使用 GCC 为 armel 进行编译,您需要一份 GCC 的副本,该副本本身是为编写 armel 而编译的。这里有一个问题...为了实现您正在尝试的目标,您需要一个将为 armel 编译的 GCC 副本,但该 GCC 副本需要在 x86_64 上运行(编译为)。这称为交叉编译器:一种针对一个指令集编译代码的编译器,在使用时将代码编译为不同的指令集。

您需要的编译器是gcc-arm-linux-gnueabihttps://packages.debian.org/buster/gcc-arm-linux-gnueabi)。您可能会发现这个 get 被头文件(编译将失败# include <...>)或库( )所困扰undefined reference to ...。恐怕我已经很久没有这样做了,我实际上不记得如何告诉编译器使用目标系统中的标头和库。这可能是你需要研究的东西。

相关内容