导航:首页 > 源码编译 > python交叉编译

python交叉编译

发布时间:2022-01-25 04:30:18

‘壹’ 交叉编译后的python 怎么使用第三方库

直接编译即可,缺少依赖会有提示,按提示安装即可。如果是自己编译的库文件,需要单独指明,方法与一般编译都一致。

‘贰’ 本人对python一窍不通,出于好奇,将最新的python3.2交叉编译弄到安卓上,凭借linux

你安装时的目录是否有改变? 提示说找不到相应的目录了。

‘叁’ 如何交叉编译Python到ARM-Linux平台

cd /usr/local/src/sudo wget http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.bz2
sudo chmod 777 Python-3.3.2.tar.bz2
sudo tar -jx -f Python-3.3.2.tar.bz2# 安装
cd Python-3.3.2/./configure --prefix=/usr/local/Python-3.3.2/sudo make
sudo make install

‘肆’ Python交叉编译失败怎么回事

1、在源码 python2.7.3/Moles/Setup.dist 搜索zlib ,打开该模块
2、继续下去,又提示缺少zlib.h,也就是我们的交叉编译库中缺少zlib头文件和库文件
3、在http://www.zlib.net/ 下载zlib源码,交叉编译zlib
由于zlib 编译不支持--host选项,所以在zlib目录下执行如下命令
~/zlib1.2.8/# mkdir _install
~/zlib1.2.8/#CC=arm-xxxxx(你的交叉编译器) ./configure --host=./_install(最好是绝对路径,我偷懒了,这个是安装目录)
~/zlib1.2.8/# make && make install
你会在_install目录下发现include 和 lib 目录
下一步,我们回到第1步
为了防止交叉编译链污染,我们在python目录下创建otherinclude otherlib
把zlib下的include和lib下的内容分别按照对应名字拷贝过来
4.在Moles/setup 找到我们前面setup.dist那句话,添加 -L../otherlib -I../otherinclude 这个应该都懂的
直接make
5,如果你之前make distclean过了,没有setup文件,请修改setup.dist.文件,重新configure!

‘伍’ python用什么处理器开发

那得看你处理器对应的交叉编译器,支持不支持Python编译。现在很多的处理器是不支持的。但是树莓派,我觉得不能算是嵌入式了,而是一个迷你电脑,它就能够使用Python编程

‘陆’ 如何交叉编译Python到ARMLinux平台 / 蓝讯

步骤一:部署protoc.exe
1)sudo su ---进入管理模式
//以下操作切换至protobuf文件夹
2)。/configure
3)make
4)make check
5)make install
此时可以查看protobuf文件夹下面的makefile文件,可以查看-build表示的本机环境以及-host表示的编译库的运行环境
我本地的-build=x86_64-apple-darwin12.3.0
-host=x86_64-apple-darwin12.3.0
(这两个参数在后续配置脚本需要用到,与后面脚步的i686-apple-darwin12.3.0以及arm-apple-darwin12.3.0后缀“arm-apple-darwin12.3.0”保持一致)
6)make distclean清理已生成的makefile,为交叉编译配置新makefile做准备

‘柒’ 如何编译可以在Windows下运行的带有Python支持的ARM Linux GDB

距离上次我编译这种GDB的时间转眼过了3年,现在(2017年3月6日),Linaro编译器已经支持python了。不过,当我们自己使用的时候还是有一些麻烦的,因为Linaro编译器的sysroot和平时我们用的sysroot还是不一样的,需要在gdbinit文件里面用"set sysroot"或"set solib-search-path"之类设定路径。生在狮子座长成座的我,是无法容忍这种麻烦的,所以还是自己来弄一次。
还是在Linux下做MinGW的交叉编译,需要MinGW交叉编译器。

因为Linaro已经做了很多事情了,源码,expat,python都搞定了,资源如下:
Linaro GDB git:

从这上面找到与Linaro编译器版本对应的源码
编译用的expat和python:

编译的时候只需要设定一个环境变量:
export PYTHON_MINGW=/home/c/gdb-arm/python-2.7.4-mingw32
然后配置一下就行了:
./configure --host=i586-mingw32msvc --target=arm-linux-gnueabihf --with-libexpat-prefix=/home/c/gdb-arm/expat-2.1.0-1 --without-libunwind-ia64 --without-libunwind-ia64 --without-lzma --with-python=/home/c/gdb-arm/python-2.7.4-mingw32 --without-guile --without-babeltrace --with-sysroot=/opt/sysroot-arm
然后就可以:
make
make DESTDIR= install

‘捌’ 有哪位大神嵌入式ARM中移植python的库,求助啊

我没弄过ubuntu下的graphics.py。
但是弄过windows下的。

1. apt是用来安装Ubuntu系统的软件的。
2. Python是Ubuntu下面的一个软件。
3. 而graphics.py属于python中的第三方库函数。

所以,即使用apt,也是用apt去安装,更新python。
而python中的库,有自己的安装方法。
常见的是直接 setup.py install或者用pip之类的去安装。

具体安装的方法,自己去参考这个:
【待完善】【总结】Python安装第三方的库、package的方法

(此处不给贴地址,请用搜标题,即可找到帖子地址)

‘玖’ 如何交叉编译Python到ARM-Linux平台

编译sqlite

先去 http://www.sqlite.org/download.html 下载最新的sqlite源代码,我这里用的是3.5.6版本的。

我推荐使用amalgamation版本的源代码,这个代码只有几个文件而已,编译起来方便,而且据说 编译器好的话,还可能编译出更高效的代码。 我下载的是

[plain]
view plain

http://www.sqlite.org/sqlite-amalgamation-3.5.6.tar.gz

先运行以下几步:

[plain]
view plain

tar zxf sqlite-amalgamation-3.5.6.tar.gz
cd sqlite-3.5.6
./configure --host=arm-linux --prefix=/usr/local/arm/3.3.2 --enable-shared --disable-readline --disable-dynamic-extensions

以上是把sqlite解压缩,然后做一些配置,这里,我希望sqlite到时候安装到/usr/local/arm/3.3.2里,要生成动态链接库,不要readline,不要sqlite的动态扩展。

然后编辑Makefile,把CFLAG和CXXFLAG中的-g去掉,我们不用debug sqlite。

接下来就可以编译和安装sqlite了:

[plain]
view plain

make
make install

这一步就完成了sqlite的编译和安装了。

编译python

先去http://www.python.org/download/下载最新版本的python源代码,我这里下载的是:

[plain]
view plain

http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2

先把python解压缩:

[plain]
view plain

tar jxf Python-2.5.1.tar.bz2
cd Python-2.5.1

编译pc版本的语法解析器

由于在编译python的时候,需要先编译一个叫pgen的程序出来,用于生成语法解析器,所以我们要先生成一个pc版本的pgen:

[plain]
view plain

mkdir build.pc
cd build.pc
../configure
make Parser/pgen

然后ls Parser一下,应该就能看到有pgen了。

修改configure

configure在检测编译器的printf是否支持%zd的时候,如果发现是在cross compile,就直接不干活了。这还了得?

把这一部分的检测代码去掉。这段代码起始于

[plain]
view plain

echo "$as_me:$LINENO: checking for %zd printf() format support" >&5
echo $ECHO_N "checking for %zd printf() format support... $ECHO_C" >&6
if test "$cross_compiling" = yes; then

结束于

[plain]
view plain

cat >>confdefs.h <<\_ACEOF
#define PY_FORMAT_SIZE_T "z"
_ACEOF

else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5

( exit $ac_status )
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi

把这两段以及中间的内容都删除掉就可以了。

编译arm版本的python

有了语法解析器,就可以开始编译arm版本的python了。

[plain]
view plain

mkdir ../build.arm
cd ../build.arm
../configure --prefix=/home/leojay/test/arm-system-working/rootfs --disable-ipv6 --host=arm-linux --enable-shared

先创建一个用于编译的目录build.arm,再对python做一些配置,如安装目录,不要ipv6,使用arm-linux的编译器,生成动态链接库。

修改Makefile

之后就要对Makefile做一些修改,把

[plain]
view plain

OPT= -DNDEBUG -g -O3 -Wall -Wstrict-prototypes

一行中,去掉-g,我们不要debug python,-O3改为-O2,空间紧张O2就可以了。



[plain]
view plain

PGEN= Parser/pgen$(EXE)

一行的下面加上

[plain]
view plain

PGEN_HOST= ../build.pc/Parser/pgen$(EXE)

表明我们在HOST上运行的pgen

在要使用PGEN的地方改为PGEN_HOST:

[plain]
view plain

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

改为:

[plain]
view plain

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

修改所有使用新生成的python的地方。

所有如 ./$(BUILDPYTHON) 的地方,都改为python

如:

[plain]
view plain

platform: $(BUILDPYTHON)
$(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform

改为

[plain]
view plain

platform: $(BUILDPYTHON)
$(RUNSHARED) python -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform

这种地方比较多,大家小心修改。

修改setup.py

setup.py负责编译python的各个扩展模块。但是,由于python完全没有考虑cross compile,所以要做一些修改。

PyBuildExt类:

函数的前两行是把/usr/local加到搜索目录中,我们的cross compiler一般不会直接安装在 /usr/local里面的,所以这两行去掉:

[plain]
view plain

lib_dirs, inc_dirs的设定中,把中括号里的那些都去掉。 以下所有模块都不要:
这个函数在编译了所有的extension后,会去load这些刚编译好的extension, 但我们在i686的电脑上显然不能load,所以要跳过这些操作。 在 build_ext.build_extension(self, ext)后面直接写一个return,不做load。
for d in ['/usr/local/arm/3.3.2/include']
for d in inc_dirs + sqlite_inc_paths:
ssl, openssl, bdb, dbm, termios, nsl, ncurses, bz2, linuxaudiodev, ossaudiodev, tkinter
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
build_extension函数:
detect_moles函数:
cmath, ctypes, _testcapi, pwd, grp, spwd, mmap, audioop, imageop, rgbimg, readline,

[plain]
view plain

由于python本身的问题,现在ctypes还不能在除i386以外的机器上运行,所以ctypes也去掉 编译sqlite的地方:

[plain]
view plain

改为:

[plain]
view plain

因为我的sqlite3安装在这里,如果这里不改的话,setup.py会在我的电脑上找sqlite

main函数:
setup函数调用的时候,把要安装的scripts那一部分去掉

之后就可以make && make install了。

附上我修改后的 Makefile 和 setup.py 供大家参考

裁减python

python完全安装后,实在是很大,所以,要把一些肯定用不上的库去掉。 所以,再附上我的裁减脚本 cleanpy.sh

注意,由于我的python程序都运行在python -OO的参数下,所有的.py和.pyc都不需要, 只要有.pyo就可以了。所以,这个脚本会把所有的.py和.pyc都删除掉。

大家可以根据自己的需要做调整。

阅读全文

与python交叉编译相关的资料

热点内容
程序员不晋升能干到多少岁 浏览:376
谷歌推广用什么服务器 浏览:626
和平精英安卓怎么登苹果系统 浏览:144
除法的心算法 浏览:300
音乐源码下载 浏览:716
编程拖放 浏览:41
linux卸载tomcat 浏览:875
手机时间如何校正到服务器 浏览:81
创造与魔法瞬移源码百度 浏览:883
反射优化java 浏览:876
硬件加密播放盒子 浏览:923
xp点击文件夹选项没反应 浏览:537
苹果不显示桌面的app怎么删除 浏览:864
安卓手机怎么换国际服 浏览:415
神兽领域安卓怎么下载 浏览:250
单片机交通灯ad原理图 浏览:413
多功能解压磁铁笔 浏览:80
少儿编程火箭升空 浏览:401
兰斯10游戏解压码 浏览:42
手机proxy服务器地址 浏览:449