首页 > 请教,工具软件的安装和CPU架构的关系

请教,工具软件的安装和CPU架构的关系

这个问题困扰我有一段时间了,希望能有朋友可以帮我理清一些软件和CPU架构的关系。

记得在学校操作系统的课本上说,应用软件的安装时在OS的基础之上的:

硬件》》》操作系统》》》应用软件

如果是这样的话,那软件的安装就只需要区分开Linux,UNIX,Win等操作系统即可,可为什么我发现nodejs,mysql等软件的安装都还有分64位 32位, ARM6, ARM7, ARM9, X86等CPU架构。另外AMD的CPU还有K8等架构,如果这样是不是AMD的CPU机器安装某些软件的时候还需要交叉编译呢?

希望有朋友也可以简单的解释下交叉编译,我在网上搜索的理解就是将软件编译后能运行在不同的CPU架构上,那么交叉编辑就必须能够将不同的CPU架构指令有某种对应关系去进行映射。会不会出现某些指令是无法找到映射关系的情况?


CPU的架构可以简单理解为CPU支持的指令的集合。不同的CPU架构支持的指令集不同,因而软件安装时需要区分CPU架构。
大型服务器常见的架构有X86(早期的Intel和AMD的CPU),AMD64(Intel叫做X86_64,本质是一回事;最近5年内Inel和AMD的CPU产品基本都可以归为这一类), Oracle的SPARC,苹果的MacPPC,国产的龙芯CPU则属于MIPS架构...;

ARM也是一种架构,主要用于嵌入式设备;在这方面(嵌入式设备),架构就更多了,有兴趣可以自己搜一下。

所谓交叉编译,就是在一种CPU架构的计算机上编译可以在另一种架构上运行的软件,比如你使用笔记本电脑(基本上属于AMD64,基本个人用的计算机都属于这一类,少数苹果机除外)编译可以在手机上或草莓派上运行的软件。

交叉编译是编译器(或tool chain)的工作。至于你说的指令映射的问题,如果交叉编译的工具链已经配置好,就不会出现这样的问题。否则就意味着在你所工作的架构上无法为目标架构进行交叉编译。

在交叉编译方面我没有什么经验,等高手再具体的讲一下吧。


因为不同操作系统的ABI(应用程序二进制接口)不同,所以在同一台机器,不同操作系统编译生成的机器码也有所不同.64位操作系统如果没有安装32位的库,是不能运行32位程序的,比如64位Ubuntu上可以安装32位的glibc库:

apt-cache show libc6:amd64 libc6:i386
/lib/x86_64-linux-gnu/libc.so.6
/lib/i386-linux-gnu/libc.so.6

几种可用的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.


64位的机器可以装32位的包,但32位的机器装不了64位的包。内核是根据CPU架构编译的,X86的内核是不能跑在ARM机器上的。

建议楼主看看操作系统的知识

【热门文章】
【热门文章】