这个问题困扰我有一段时间了,希望能有朋友可以帮我理清一些软件和CPU架构的关系。
记得在学校操作系统的课本上说,应用软件的安装时在OS的基础之上的:
硬件》》》操作系统》》》应用软件
如果是这样的话,那软件的安装就只需要区分开Linux,UNIX,Win等操作系统即可,可为什么我发现nodejs,mysql等软件的安装都还有分64位 32位, ARM6, ARM7, ARM9, X86等CPU架构。另外AMD的CPU还有K8等架构,如果这样是不是AMD的CPU机器安装某些软件的时候还需要交叉编译呢?
希望有朋友也可以简单的解释下交叉编译,我在网上搜索的理解就是将软件编译后能运行在不同的CPU架构上,那么交叉编辑就必须能够将不同的CPU架构指令有某种对应关系去进行映射。会不会出现某些指令是无法找到映射关系的情况?
因为不同操作系统的ABI(应用程序二进制接口)不同,所以在同一台机器,不同操作系统编译生成的机器码也有所不同.64位操作系统如果没有安装32位的库,是不能运行32位程序的,比如64位Ubuntu上可以安装32位的glibc库:
几种可用的ARM交叉编译工具套件:CodeSourcery,Linaro,Android NDK(区别于SDK).
CodeSourcery基于GNU GCC改造的交叉编译器arm-none-linux-gnueabi能兼容很多ARM架构.
在Linux上把PHP移植到Android上运行的DroidPHP项目就是使用arm-none-linux-gnueabi-gcc这个交叉编译器,编译教程点这里.
多说几句题外话:因为PHP内置了HTTP Server和SQLite数据库,把PHP部署到客户端Android,WebView作为界面,用网站开发的HTML/CSS/JS/PHP/SQL技术其实就能开发Android应用,毕竟整个PHP环境压缩后大小也只有10MB.