python arm linux编译和运行

359 views
Skip to first unread message

昂哲王

unread,
Jul 30, 2008, 2:02:09 AM7/30/08
to pyth...@googlegroups.com
大伙有没有在arm linux 下玩玩python?
在google下搜索了下,主要参考,可以交叉编译出来运行不了。
那位有这方面的经验,分享下,或者直接有个编译好的版本,直接使用也可以。谢谢了

--
王昂哲

Leo Jay

unread,
Jul 30, 2008, 2:07:01 AM7/30/08
to pyth...@googlegroups.com
2008/7/30 昂哲王 <wanga...@gmail.com>:

> 大伙有没有在arm linux 下玩玩python?
> 在google下搜索了下,主要参考,可以交叉编译出来运行不了。
> 那位有这方面的经验,分享下,或者直接有个编译好的版本,直接使用也可以。谢谢了
>


linux下编译出来的东西跟你的编译器跟你的运行环境都有关系的,最好不要拿人家编译的来用,很多时候用不了。
你运行不了有什么提示么?你都做了什么了?

--
Best Regards,
Leo Jay

昂哲王

unread,
Jul 30, 2008, 2:24:09 AM7/30/08
to pyth...@googlegroups.com
就是交叉编译能干什么,从设计上python就没有想过交叉编译,很多的东西不支持, configure和makefile都需要修改。现在的现象是库加载不对。
其实基于arm v5架构,应该问题不大,编译好的应该可以用。

2008/7/30 Leo Jay <python...@gmail.com>



--
王昂哲

Leo Jay

unread,
Jul 30, 2008, 2:30:37 AM7/30/08
to pyth...@googlegroups.com
2008/7/30 昂哲王 <wanga...@gmail.com>:

> 就是交叉编译能干什么,从设计上python就没有想过交叉编译,很多的东西不支持,
> configure和makefile都需要修改。现在的现象是库加载不对。
> 其实基于arm v5架构,应该问题不大,编译好的应该可以用。
>

跟你用什么版本的linux以及什么libc也有关的。
而且我没编译过armv5,我编译的是armv4t

昂哲王

unread,
Jul 30, 2008, 2:42:22 AM7/30/08
to pyth...@googlegroups.com
你需要做什么修改吗?直接可以编译通过?
2008/7/30 Leo Jay <python...@gmail.com>



--
王昂哲

Yingbo Qiu

unread,
Jul 30, 2008, 2:42:46 AM7/30/08
to pyth...@googlegroups.com
2008/7/30 昂哲王 <wanga...@gmail.com>:

> 大伙有没有在arm linux 下玩玩python?
> 在google下搜索了下,主要参考,可以交叉编译出来运行不了。
> 那位有这方面的经验,分享下,或者直接有个编译好的版本,直接使用也可以。谢谢了
>
参考一下 debian 的包?

Leo Jay

unread,
Jul 30, 2008, 2:48:08 AM7/30/08
to pyth...@googlegroups.com
2008/7/30 昂哲王 <wanga...@gmail.com>:
> 你需要做什么修改吗?直接可以编译通过?
>

按我的文章改啊。你不是找到那篇文章了么?

昂哲王

unread,
Jul 30, 2008, 2:51:06 AM7/30/08
to pyth...@googlegroups.com
哈哈,和作者直接对话了。我再看看。
2008/7/30 Leo Jay <python...@gmail.com>



--
王昂哲

Border

unread,
Jul 30, 2008, 5:03:31 AM7/30/08
to pyth...@googlegroups.com

我这几天就在ARM(tms320-dm6446)里用python做简单的网管,



--
Border
Blog: http://b0rder.com/
Mail: borderj {at} gmail.com

Jiahua Huang

unread,
Jul 30, 2008, 5:18:57 AM7/30/08
to pyth...@googlegroups.com
2008/7/30 昂哲王 <wanga...@gmail.com>:
> 大伙有没有在arm linux 下玩玩python?

arm9、10 可以用 debian arm 的包。

debian linux 有 arm 版本,包含几乎全套软件。

Arui Zen

unread,
Jul 30, 2008, 5:41:37 AM7/30/08
to pyth...@googlegroups.com
可以直接用debian的arm包?! 太帅了!有机会一定要试一下!


2008/7/30 Jiahua Huang <jhuang...@gmail.com>



--

DJ

Border

unread,
Jul 30, 2008, 11:01:06 PM7/30/08
to pyth...@googlegroups.com



2008/7/30 Jiahua Huang <jhuang...@gmail.com>

2008/7/30 昂哲王 <wanga...@gmail.com>:
> 大伙有没有在arm linux 下玩玩python?

arm9、10 可以用 debian arm 的包。

debian linux 有 arm 版本,包含几乎全套软件。


--

昂哲王

unread,
Jul 31, 2008, 12:51:35 AM7/31/08
to pyth...@googlegroups.com
这个不错,正在尝试,谢了!

2008/7/31 Border <bor...@gmail.com>



--
王昂哲

昂哲王

unread,
Jul 31, 2008, 1:01:30 AM7/31/08
to pyth...@googlegroups.com
不好意思,按照你的方法编译应该是可以了,但是应该怎么部署在arm?,我直接copy后,运行python,加载libpython2.5.so.1.0 失败。

2008/7/30 Leo Jay <python...@gmail.com>



--
王昂哲

Leo Jay

unread,
Jul 31, 2008, 1:05:41 AM7/31/08
to pyth...@googlegroups.com
2008/7/31 昂哲王 <wanga...@gmail.com>:

> 不好意思,按照你的方法编译应该是可以了,但是应该怎么部署在arm?,我直接copy后,运行python,加载libpython2.5.so.1.0
> 失败。
>

你的系统里有没有libpython2.5.so.1.0?
有没有设PATH, LD_LIBRARY_PATH和PYTHONHOME环境变量?

看一下你的所有依赖的动态库是否能正确的找到。

Border

unread,
Jul 31, 2008, 6:09:20 AM7/31/08
to pyth...@googlegroups.com
我在make的时候出现: 无法执行二进制文件

不知道是什么原因,

case $MAKEFLAGS in \
        *-s*) LD_LIBRARY_PATH=/home/border/tools/Python-2.5.2/build.arm: CC='arm_v5t_le-gcc' LDSHARED='arm_v5t_le-gcc -shared' OPT='-DNDEBUG -fwrapv -O2 -Wall -Wstrict-prototypes' python -E ../setup.py -q build;; \
        *) LD_LIBRARY_PATH=/home/border/tools/Python-2.5.2/build.arm: CC='arm_v5t_le-gcc' LDSHARED='arm_v5t_le-gcc -shared' OPT='-DNDEBUG -fwrapv -O2 -Wall -Wstrict-prototypes' python -E ../setup.py build;; \
        esac
/bin/sh: line 2: ./python:无法执行二进制文件
make: *** [sharedmods] 错误 126



2008/7/31 Leo Jay <python...@gmail.com>



--

Leo Jay

unread,
Jul 31, 2008, 6:20:24 AM7/31/08
to pyth...@googlegroups.com
2008/7/31 Border <bor...@gmail.com>:

> 我在make的时候出现: 无法执行二进制文件
>
> 不知道是什么原因,
>
> case $MAKEFLAGS in \
> *-s*) LD_LIBRARY_PATH=/home/border/tools/Python-2.5.2/build.arm:
> CC='arm_v5t_le-gcc' LDSHARED='arm_v5t_le-gcc -shared' OPT='-DNDEBUG -fwrapv
> -O2 -Wall -Wstrict-prototypes' python -E ../setup.py -q build;; \
> *) LD_LIBRARY_PATH=/home/border/tools/Python-2.5.2/build.arm:
> CC='arm_v5t_le-gcc' LDSHARED='arm_v5t_le-gcc -shared' OPT='-DNDEBUG -fwrapv
> -O2 -Wall -Wstrict-prototypes' python -E ../setup.py build;; \
> esac
> /bin/sh: line 2: ./python:无法执行二进制文件
> make: *** [sharedmods] 错误 126
>


你应该是哪里没有改对,你试图在你的pc上执行arm的程序了。
再好好看看所有运行./$(BUILDPYTHON)的地方,都改成你本地的python就好了。

Border

unread,
Jul 31, 2008, 6:23:58 AM7/31/08
to pyth...@googlegroups.com

晕了,编译好的是在目标机上执行的,在x86上执行当然报错,哈哈
然后 make install

复制编译好的到ARM机上,我是把
bin 复制到/usr/local/bin
lib -> /usr/lib

 
ro...@192.168.0.167:~# python
Python 2.4b1 (#1, Jul 23 2005, 00:34:04)
[GCC 3.4.3 (MontaVista 3.4.3-25.0.30.0501131 2005-07-22)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'Hello ARM!'
Hello ARM!
>>>


2008/7/31 Border <bor...@gmail.com>
我在make的时候出现: 无法执行二进制文件

不知道是什么原因,

case $MAKEFLAGS in \
        *-s*) LD_LIBRARY_PATH=/home/border/tools/Python-2.5.2/build.arm: CC='arm_v5t_le-gcc' LDSHARED='arm_v5t_le-gcc -shared' OPT='-DNDEBUG -fwrapv -O2 -Wall -Wstrict-prototypes' python -E ../setup.py -q build;; \
        *) LD_LIBRARY_PATH=/home/border/tools/Python-2.5.2/build.arm: CC='arm_v5t_le-gcc' LDSHARED='arm_v5t_le-gcc -shared' OPT='-DNDEBUG -fwrapv -O2 -Wall -Wstrict-prototypes' python -E ../setup.py build;; \
        esac
/bin/sh: line 2: ./python:无法执行二进制文件
make: *** [sharedmods] 错误 126



2008/7/31 Leo Jay <python...@gmail.com>

2008/7/31 昂哲王 <wanga...@gmail.com>:
> 不好意思,按照你的方法编译应该是可以了,但是应该怎么部署在arm?,我直接copy后,运行python,加载libpython2.5.so.1.0
> 失败。
>




--
Border
Blog: http://b0rder.com/
Mail: borderj {at} gmail.com

Border

unread,
Jul 31, 2008, 6:27:45 AM7/31/08
to pyth...@googlegroups.com

是的偷懒了,把所有的./$(BUILDPYTHON)都替换了,是不是应该只替换一部分,不过这个并不影响结果,可以正常make install
在arm里面可以正常运行。

再研究研究。


你应该是哪里没有改对,你试图在你的pc上执行arm的程序了。
再好好看看所有运行./$(BUILDPYTHON)的地方,都改成你本地的python就好了。




--

Leo Jay

unread,
Jul 31, 2008, 6:29:18 AM7/31/08
to pyth...@googlegroups.com
2008/7/31 Border <bor...@gmail.com>:

>
> 晕了,编译好的是在目标机上执行的,在x86上执行当然报错,哈哈
> 然后 make install
>
> 复制编译好的到ARM机上,我是把
> bin 复制到/usr/local/bin
> lib -> /usr/lib
>
>
> ro...@192.168.0.167:~# python
> Python 2.4b1 (#1, Jul 23 2005, 00:34:04)
> [GCC 3.4.3 (MontaVista 3.4.3-25.0.30.0501131 2005-07-22)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>>>> print 'Hello ARM!'
> Hello ARM!
>>>>
>
>

恭喜恭喜啊。

只是,你为什么使用2.4b1版本啊?怎么不用2.5.2?

Leo Jay

unread,
Jul 31, 2008, 6:31:06 AM7/31/08
to pyth...@googlegroups.com
2008/7/31 Border <bor...@gmail.com>:

>
> 是的偷懒了,把所有的./$(BUILDPYTHON)都替换了,是不是应该只替换一部分,不过这个并不影响结果,可以正常make install
> 在arm里面可以正常运行。
>
> 再研究研究。
>

我记得应该是都要替换的。在本机上显然不能运行刚编译好的arm版本的python。

Border

unread,
Jul 31, 2008, 6:32:12 AM7/31/08
to pyth...@googlegroups.com


嘿嘿,错了,刚是2.4的,

ro...@192.168.0.167:~# python2.5                                                
Could not find platform dependent libraries <exec_prefix>                      
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]                       
Python 2.5.2 (r252:60911, Jul 31 2008, 18:05:30)                               
[GCC 3.4.3 (MontaVista 3.4.3-25.0.30.0501131 2005-07-23)] on linux2            
Type "help", "copyright", "credits" or "license" for more information.         
>>>



Leo Jay

unread,
Jul 31, 2008, 6:35:54 AM7/31/08
to pyth...@googlegroups.com
On Thu, Jul 31, 2008 at 6:32 PM, Border <bor...@gmail.com> wrote:
>
> 嘿嘿,错了,刚是2.4的,
>
> ro...@192.168.0.167:~#
> python2.5
> Could not find platform dependent libraries
> <exec_prefix>
> Consider setting $PYTHONHOME to
> <prefix>[:<exec_prefix>]
> Python 2.5.2 (r252:60911, Jul 31 2008,
> 18:05:30)
> [GCC 3.4.3 (MontaVista 3.4.3-25.0.30.0501131 2005-07-23)] on
> linux2
> Type "help", "copyright", "credits" or "license" for more
> information.
>>>>
>

恭喜。
你再设一下PYTHONHOME环境变量就不会出warning了。

Border

unread,
Jul 31, 2008, 6:40:52 AM7/31/08
to pyth...@googlegroups.com

谢谢,全靠你写的文档

但是有一点想不通:
./$(BUILDPYTHON) 没有必要替换成 python 吧, 为什么要在HOST机上,执行setup.py, 如果是这样的话肯定会报错的。

有点不太明。

 
恭喜。
你再设一下PYTHONHOME环境变量就不会出warning了。

--
Best Regards,
Leo Jay

Leo Jay

unread,
Jul 31, 2008, 6:47:20 AM7/31/08
to pyth...@googlegroups.com
2008/7/31 Border <bor...@gmail.com>:

>
> 谢谢,全靠你写的文档。
>
> 但是有一点想不通:
> ./$(BUILDPYTHON) 没有必要替换成 python 吧, 为什么要在HOST机上,执行setup.py, 如果是这样的话肯定会报错的。
>
> 有点不太明。
>
>

不客气。

先统一一下术语,HOST机是指arm,BUILD机是指x86,这个你没搞错吧?
我们什么时候在HOST机上执行过setup.py?整个编译过程都是在BUILD机器上执行的啊。

Border

unread,
Jul 31, 2008, 7:14:31 AM7/31/08
to pyth...@googlegroups.com
2008/7/31 Leo Jay <python...@gmail.com>
2008/7/31 Border <bor...@gmail.com>:
> 我在make的时候出现: 无法执行二进制文件
>
> 不知道是什么原因,
>
> case $MAKEFLAGS in \
>         *-s*) LD_LIBRARY_PATH=/home/border/tools/Python-2.5.2/build.arm:
> CC='arm_v5t_le-gcc' LDSHARED='arm_v5t_le-gcc -shared' OPT='-DNDEBUG -fwrapv
> -O2 -Wall -Wstrict-prototypes' python -E ../setup.py -q build;; \
>         *) LD_LIBRARY_PATH=/home/border/tools/Python-2.5.2/build.arm:
> CC='arm_v5t_le-gcc' LDSHARED='arm_v5t_le-gcc -shared' OPT='-DNDEBUG -fwrapv
> -O2 -Wall -Wstrict-prototypes' python -E ../setup.py build;; \
>         esac
> /bin/sh: line 2: ./python:无法执行二进制文件
> make: *** [sharedmods] 错误 126
>


再好好看看所有运行./$(BUILDPYTHON)的地方,都改成你本地的python就好了。

 --------
先统一一下术语,HOST机是指arm,
BUILD机是指x86,这个你没搞错吧?
我们什么时候在HOST机上执行过setup.py?整个编译过程都是在BUILD机器上执行的啊。
--------
 

--
Best Regards,
Leo Jay


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

是把所以./$(BUILDPYTHON) 的地方,改为BUILD机器的python地址吗? (也就是x86上的python的路径),并不是刚刚编译的

build.arm/  下面的python.

如果不是的话:
platform: $(BUILDPYTHON)
$(RUNSHARED) python -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform
这个中的python是被./$(BUILDPYTHON)替换后的,这句话主要作什么的。

谢谢。

Leo Jay

unread,
Jul 31, 2008, 7:25:07 AM7/31/08
to pyth...@googlegroups.com
2008/7/31 Border <bor...@gmail.com>:

>
> ./$(BUILDPYTHON) 的地方,都改为python ,
>
> 是把所以./$(BUILDPYTHON) 的地方,改为BUILD机器的python地址吗? (也就是x86上的python的路径),并不是刚刚编译的
> build.arm/ 下面的python.
>

是的,原来的意思是使用新编译的python来做事情。但原本的Makefile里没有考虑到cross
compile时,新编译出来的python不能在build机器上调用的情况。

所以要把./$(BUILDPYTHON)去掉。改成调用build机器上已有的python。


> 如果不是的话:
>
> platform: $(BUILDPYTHON)
>
> $(RUNSHARED) python -E -c 'import sys ; from distutils.util import
> get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform
>
> 这个中的python是被./$(BUILDPYTHON)替换后的,这句话主要作什么的。
>
> 谢谢。
>

--
Best Regards,
Leo Jay

Border

unread,
Jul 31, 2008, 8:31:30 AM7/31/08
to pyth...@googlegroups.com

明白了,再次感谢。

    我们在setup.py 已经把那些script去掉了,是不是就可以把./$(BUILDPYTHON) 相关的部分注释掉,可以减少空间,如果需要什么模块可以自己手动copy。

不知道说的对不对。

PS: 一般说的HOST机就是那个开发机(x86),向ARM之类的嵌入式设备都叫Target。




2008/7/31 Leo Jay <python...@gmail.com>
embedded.JPG

Leo Jay

unread,
Jul 31, 2008, 8:45:18 AM7/31/08
to pyth...@googlegroups.com
2008/7/31 Border <bor...@gmail.com>:

>
> 明白了,再次感谢。
>
> 我们在setup.py 已经把那些script去掉了,是不是就可以把./$(BUILDPYTHON)
> 相关的部分注释掉,可以减少空间,如果需要什么模块可以自己手动copy。
>
> 不知道说的对不对。
>
> PS: 一般说的HOST机就是那个开发机(x86),向ARM之类的嵌入式设备都叫Target。
>
>

果然我们的术语没有统一。
参见 http://en.wikipedia.org/wiki/Cross_compile

The build platform is where the code is actually compiled. The host
platform is where the compiled code will execute. The target platform
usually only applies to compilers. It represents what type of object
code the package itself will produce (such as cross-compiling a
cross-compiler); otherwise the target platform setting is irrelevant.
For example, consider cross-compiling a video game that will run on a
Dreamcast. The machine where the game is compiled is the build
platform while the Dreamcast is the host platform.

Leo Jay

unread,
Jul 31, 2008, 8:51:46 AM7/31/08
to pyth...@googlegroups.com
2008/7/31 Border <bor...@gmail.com>:

>
> 明白了,再次感谢。
>
> 我们在setup.py 已经把那些script去掉了,是不是就可以把./$(BUILDPYTHON)
> 相关的部分注释掉,可以减少空间,如果需要什么模块可以自己手动copy。
>
> 不知道说的对不对。
>
> PS: 一般说的HOST机就是那个开发机(x86),向ARM之类的嵌入式设备都叫Target。
>

而且你记不记得我们在cross compile软件的时候,都要加上一个参数: --host=arm-linux
显然这里arm-linux不是指我们的pc啊。

Border

unread,
Jul 31, 2008, 9:25:23 AM7/31/08
to pyth...@googlegroups.com
我安装的时候用的是:--host=arm_v5t_le

但是看configure里面也有 --target 属性。还以为这些是自动匹配编译工具的。

比如:我的交叉编译工具是:arm_v5t_le-gcc, 如果配置了host或target为 arm_v5t_le 就能自动匹配到 arm_v5t_le-gcc。

我感觉在python里面host和target这两个表示的是一个意思。-_-

明天到公司试试看。

2008/7/31 Leo Jay <python...@gmail.com>

Leo Jay

unread,
Jul 31, 2008, 9:41:11 AM7/31/08
to pyth...@googlegroups.com
2008/7/31 Border <bor...@gmail.com>:

> 我安装的时候用的是:--host=arm_v5t_le
>
> 但是看configure里面也有 --target 属性。还以为这些是自动匹配编译工具的。
>
> 比如:我的交叉编译工具是:arm_v5t_le-gcc, 如果配置了host或target为 arm_v5t_le 就能自动匹配到
> arm_v5t_le-gcc。
>
> 我感觉在python里面host和target这两个表示的是一个意思。-_-
>
> 明天到公司试试看。
>

这是cross compile的概念,跟python是没关系的。

不管你的host写的是什么,一定是指你的运行平台arm,要是写编译平台i686,编译出来的东西一定不对。
而且,只有在cross comile一个cross compiler的时候,target才有意义,否则,target的设置没有意义。

这些,你看wikipedia里的定义就知道了

Border

unread,
Jul 31, 2008, 10:01:46 AM7/31/08
to pyth...@googlegroups.com
真的有些晕了,看了好几本书,host和target的说法和wiki的说法不一样。

不知道有没有业界的标准,我也是近一段时间刚接触嵌入式开发。

Embedded.Linux.Primer
Programming Embedded Systems in C and C++
Programming Embedded Systems with C and GNU Development Tools, 2nd Edition
构建嵌入式linux

2008/7/31 Leo Jay <python...@gmail.com>
2008/7/31 Border <bor...@gmail.com>:
>

Leo Jay

unread,
Jul 31, 2008, 11:08:11 AM7/31/08
to pyth...@googlegroups.com
2008/7/31 Border <bor...@gmail.com>:

> 真的有些晕了,看了好几本书,host和target的说法和wiki的说法不一样。
>
> 不知道有没有业界的标准,我也是近一段时间刚接触嵌入式开发。
>
> Embedded.Linux.Primer
> Programming Embedded Systems in C and C++
> Programming Embedded Systems with C and GNU Development Tools, 2nd Edition
> 构建嵌入式linux
>

在技术方面,一般在没有找到特别有力的反面证据的话,我都认为wikipedia的是正确的。

Border

unread,
Aug 1, 2008, 9:10:47 PM8/1/08
to pyth...@googlegroups.com

一些基本的感念都没有搞明白,继续学习中。。。

PS: 参照你的HOWTOCrossCompilePythonForARM, 我也简单记录了一下:

How To Cross Compile Python 2.5.2 For ARM



2008/7/31 Leo Jay <python...@gmail.com>
Reply all
Reply to author
Forward
0 new messages