python交叉编译跨平台_交叉编译 python

本文介绍了如何进行Python 2.7的交叉编译,以实现跨平台部署。首先从python.org下载源代码,然后应用特定的patch,通过修改configure.ac和Makefile.pre.in来支持交叉编译。接着,创建build目录并执行configure、make、make install,配置过程中需要注意设置正确的主机、目标平台和路径。文章提到了配置过程中可能遇到的问题,如依赖库的配置,并给出了针对sqlite3和ssl模块的配置示例。最后,文章讨论了如何处理编译依赖和环境变量,以及裁剪不必要的Python模块以减小解释器大小。
摘要由CSDN通过智能技术生成

本文来自 我的博客。博客的文章保持更新,此文可能不是最新状态。

下载、解压 python 源代码

从 python.org 下载。

导入交叉编译 patch

Python 虽然使用 autoconf,但是事实上代码中已经包含 configure 文件,因此下文代码给出的是修改 configure.ac 并执行 autoconf 后生成的 configure 文件。

patch 的使用方法,在 python 源代码根目录下执行:

patch -p1 < ../0001-cross-compile.patch

python 2.7.11 交叉编译 patch:

diff --git a/Makefile.pre.in b/Makefile.pre.in

index ee73edd..730db7e 100644

--- a/Makefile.pre.in

+++ b/Makefile.pre.in

@@ -237,7 +237,8 @@ LIBFFI_INCLUDEDIR= @LIBFFI_INCLUDEDIR@

##########################################################################

# Parser

-PGEN= Parser/pgen$(EXE)

+BUILDPGEN= Parser/pgen$(EXE)

+PGEN_FOR_BUILD= @PGEN_FOR_BUILD@

PSRCS= \

Parser/acceler.c \

@@ -635,14 +636,14 @@ Modules/pwdmodule.o: $(srcdir)/Modules/pwdmodule.c $(srcdir)/Modules/posixmodule

$(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGENSRCS)

@$(MKDIR_P) Include

- $(MAKE) $(PGEN)

- $(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

+ $(MAKE) $(BUILDPGEN)

+ $(PGEN_FOR_BUILD) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

$(GRAMMAR_C): $(GRAMMAR_H) $(GRAMMAR_INPUT) $(PGENSRCS)

$(MAKE) $(GRAMMAR_H)

touch $(GRAMMAR_C)

-$(PGEN): $(PGENOBJS)

- $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)

+$(BUILDPGEN): $(PGENOBJS)

+ $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(BUILDPGEN)

Parser/grammar.o: $(srcdir)/Parser/grammar.c \

$(srcdir)/Include/token.h \

diff --git a/configure b/configure

index 7dab897..bf16c0e 100755

--- a/configure

+++ b/configure

@@ -734,6 +734,7 @@ UNIVERSALSDK

CONFIG_ARGS

SOVERSION

VERSION

+PGEN_FOR_BUILD

PYTHON_FOR_BUILD

host_os

host_vendor

@@ -2911,6 +2912,13 @@ else

fi

+if test "$cross_compiling" = yes; then

+ PGEN_FOR_BUILD="${PGEN_FOR_BUILD}"

+else

+ PGEN_FOR_BUILD='$(BUILDPGEN)'

+fi

+

+

if test "$prefix" != "/"; then

prefix=`echo "$prefix" | sed -e 's/\/$//g'`

@@ -6334,6 +6342,12 @@ fi

# Enable PGO flags.

+

+

+

+

+

+

# Extract the first word of "llvm-profdata", so it can be a program name with args.

set dummy llvm-profdata; ac_word=$2

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5

--

1.9.1

创建 build 目录

在 python 源代码下创建 build-pc 和 build-mips 目录,分别用于编译 PC pgen(交叉编译时用到)与交叉编译 mips python。该目录做 configure、make、make install,编译时用于保存临时生成的文件,保证 python 源代码干净。

编译本地 Python 与 pgen

用于生成 grammar 所需要文件用。

cd build-pc

../configure CC=gcc CXX=g++ AR=ar RANLIB=ranlib LDFLAGS="-L/usr/lib -L/usr/lib64 -L/usr/local/lib -L/usr/local/lib64" CFLAGS="-I/usr/include -I/u

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值