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!
2. 交叉编译Python-从入坑到入坟
了解Python的交叉编译过程,可以分为两大部分:主机端Python的编译与设备端Python的编译。首先,主机端Python需要从官网下载并解压所需的Python版本源码。若电脑端已安装Python,且想在设备端安装相同版本的Python,则可直接跳过本步骤。
主机端Python的编译流程包括配置、编译与安装。编译后的主机端Python会被保存在`build_pc`文件夹下,并可复制到其他位置,以防后续编译设备端Python时被清理。
接着,进行设备端Python的编译。这包括编译第三方依赖库,主要有zlib、ffi与openssl。首先,编译zlib,完成配置、编译与安装。zlib会被安装在当前文件夹`zlib_arm/`下,以便备用。同样,编译ffi并安装在`ffi_arm/`下,供后续使用。
完成依赖库的编译后,进行设备端Python的编译。这包括配置、编译与安装步骤。编译好的设备端Python库会被安装在`build_arm/`文件夹下。
设备端Python编译完成,还需进行组合与下机测试。在开发板上下载Python前,需将zlib与ffi对应的动态库放置在`Pythonlib/python3.x/lib-dynload`文件夹内。进行打包下载至开发板,并进行环境配置。配置好环境变量后,在开发板上进行测试。如出现缺少库错误,需搜索工具链路径下对应的库,并将这些库及其存放路径加入到开发板的`LD_LIBRARY_PATH`环境变量中。
在确保所有库转移至开发板并正确加入`LD_LIBRARY_PATH`后,重新执行`python3 -V`命令,应能不报错并正确显示Python版本号。
交叉编译第三方库如numpy、pyserial与opencv等至开发板时,首先需在电脑端安装交叉编译库`cross_env`。配置激活虚拟环境后,按照指定路径执行交叉编译步骤。以numpy为例,配置好虚拟环境后,将numpy包拷贝至设备端python的`site-packages/`路径下,并在开发板上验证安装是否成功。
交叉编译opencv时,流程包括配置、编译、拷贝动态库到开发板并配置`LD_LIBRARY_PATH`环境变量,以及上板测试。完成所有交叉编译步骤后,对生成的Python包进行裁剪压缩。通过删除Python runtime中不必要的文件、使用`strip`工具对动态库与可执行文件进行裁剪,最终将包压缩至较小的体积。经过此流程,整个Python包被成功压缩至48M。
3. 北大青鸟设计培训:怎样才能提高Python运行效率
python逐渐走入人们的视线,成为热门编程语言,随之而来,加入python培训的准程序员大军也成为社会热点。
Python具有许多其他编程语言不具备的优势,譬如能通过陆宽雀极少量代码完成许多操作,以及多进程,能够轻松支持多任务处理。
除了多种优势外,python也有不好的地方,运行较慢,下面电脑培训http://www.kmbdqn.cn/为大家介绍6个窍门,可以帮你提高python的运行效率。
1.在排序时使用键Python含有许多古老的排序规则,这些规则在你创建定制的排序方法时会占用很多时间,而这些排序方法运行时也会拖延程序实际的运行速度。
最佳的排序方法其实是尽可能多地使用键和内置的sort()方法。
2.交叉编译你的应用开发者有时会忘记计算机其实并不理解用来创建现代应用程序的编程语言。
计算机理解的是机器语言。
为了运行你的应用,你借助一个应用将你所编的人类可读的代码转换成机器可读的代码。
有时,你用一种诸如Python这样的语言编写应用,再以C++这样的语言运行你的应用,这在运行的角度来说,是可行的。
关键在于,你想你的应用完成什么事情,而你的主机系统能提供什么样的资源。
3.关键代码使用外部功能包Python简化了许多编程任务,但是对于一些时间敏感的任务,它的表现经常不尽人意。
使用C/C++或机器语言的外部功能包处理时间敏感任务,可以有效提高应用的运行效率。
这些功能包往往依附于特定的平台,因此你要根据自己所用的平台选择合适的功能包。
简而言之,这个窍门要你牺牲应用的可移植性以换取只有通过对底层主机的直接编程才能获得的运行效率。
4.针对循环的优化每一种编程语言都强调最优化的循环方案。
当使用Python时,你可以借巧乱助丰富的技巧让循环程序跑得更快。
然而,开发者们经常遗忘的一个技巧是:尽量避免在循环中访问变量的属性。
5.尝试多种编码方法每次创建应用时都使用同一种编码方法几乎无一例外会导致应用的运行效率不尽人意。
可以在程序分析时尝试一些试验性的办法。
譬如说,在处理字典中的数据项早早时,你既可以使用安全的方法,先确保数据项已经存在再进行更新,也可以直接对数据项进行更新,把不存在的数据项作为特例分开处理。
6.使用较新的Python版本你要保证自己的代码在新版本里还能运行。
你需要使用新的函数库才能体验新的Python版本,然后你需要在做出关键性的改动时检查自己的应用。
只有当你完成必要的修正之后,你才能体会新版本的不同。
4. Linux-Arm环境下配置编译qt-everywhere及交叉编译环境
在进行Linux-Arm环境下配置编译qt-everywhere及交叉编译环境的过程中,首先需要明确的是,Qt并未直接提供针对Arm平台的版本,故需要通过qt-everywhere套件在Arm系统上自行编译。在此过程中,我们需特别注意Qt-everywhere在Arm环境下编译可能遇到的问题,例如尝试直接使用./configure -prefix xxx来编译时,可能会出现“libqtharfbuzz.a:No such file or directory”的报错,导致编译失败。
因此,在Arm板上进行编译前的准备时,需对某些模块进行取舍,即在./configure阶段将其标注为不需要。接下来,我们将具体流程详细展开。
1. 下载并解压qt-everywhere包至指定文件夹,例如使用download.qt.io下载并解压qt-everywhere-src-5.12.10.tar.xz至工作目录。
2. 进入qt-everywhere-src-5.12.10目录,使用./configure -prefix ~/qtInstall来配置并指定编译后的Qt安装目录。具体安装目录可以根据需要自行调整。
3. 若./configure过程无误,将提示可以使用make install进行编译和安装。然而,编译过程中可能会遇到如“数字有关的函数未被定义”的错误,例如在qendian.h中。解决此问题,需手动添加相应的头文件,如在文件中添加#include \ 来解决。
4. 在完成make install后,可能还会遇到其他依赖库缺失的错误,如libharfbuzz或Python库。解决这类问题,可以通过在Linux系统中使用sudo apt-get install libharfbuzz-dev安装libharfbuzz库,或使用sudo apt-get install python安装Python库,然后删除build后的相关文件,重新编译Qt。
通过以上步骤,我们能够在Arm环境下成功配置并编译qt-everywhere,为后续的交叉编译环境搭建奠定基础。