请问运行于不同CPU构架的linux,它们的软件可以通用吗?

在不重新编译源代码的情况下。 比如x86的linux的软件可以运行于arm构架的linux吗,
是不是和在编译是否时为X86的CPU构架优化了编译有关?那么多数的软件在编译时是否为X86的CPU构架而优化了呢?还是和不同的安装包格式有关?那么.tar.gz格式的软件包呢? 在arm的linux安装时编译是否就可以成功安装。
还有就是:是不是所有的源代码只要在arm的CPU下编译就一定可以.
如果有源代码呢?
重新编译就可以了吗?

以上回答中jiangtao9999的比较靠谱儿。
是这样:
1、Linux下的软件几乎都是c语言的;
2、如果你学过C语言,找找书应该有这样一个概念:ANSI C,这个是一个C语言的标准,比如printf这个函数就属于标准库(也就是符合ANSI标准的)函数
3、假如你编写了一个软件,代码中仅仅包含ANSI的库函数,那么没有问题,只要是支持C语言的平台,都能正常运行,即:编写了一个简简单单的helloworld到哪里编译运行都没有问题。
【前提是:】编译再运行,不编译就运行是不可以的,比如printf函数在各种架构上的实现方式是不可能相同的,所以需要在arm的编译器上再编译一遍才可以。否则运行不了。
有的软件平台可以不用编译,直接运行,比如jiangtao9999说的java、Python什么的,Java可以实现“一次编译,满哪运行”什么的,而Python则是有了.py源代码就可以无敌了,使用的时候不用你去执行编译命令,直接执行即可。arm上实现这两种语言都是很容易的——下载源代码、编译、安装即可。
4、不同架构的Linux平台都要实现一个编译器,这是很重要的,有了编译器,才可以从源代码安装软件。
5、使用非ANSI库中的函数需要该Linux包含这个函数的实现,否则,编译后的连接将不通过,比如一个软件使用了GTK来实现图形用户界面,那么就需要系统中包含了gtk的库函数,这就叫依赖,安装软件,首先要解决依赖,依赖有时候解决起来很麻烦,所以软件开发过程中尽量减少依赖,这样方便安装。
6、tar.gz这种格式的软件包有可能是源代码,有可能是可执行文件(这是因为那只是一个压缩包,内容是什么不一定),这两者不同。很多软件以tar.gz格式发布源代码,而qq的Linux版本属于可执行文件,在几乎所有Linux平台下面直接双击或者通过命令就可以使用。
7、如果你使用的是rpm包或者deb包或者是tar.gz文件包中可执行文件形式的软件包,而不是tar.gz这种形式的源代码,你需要使用相应的软件包管理器安装就行,
但这不意味着arm版本的deb和x86版本的deb文件是通用的,你能这样用是因为所有的使用x86机器的软件经过编译或者交叉编译(在arm平台上编译x86平台上的软件就叫交叉编译)以后,运行于几乎完全一样的统一的平台上,实现软件和系统的无缝对接,方便了用户——一方面可以不用浪费编译的时间,主要还是方便了那些不会编译软件的人。
8、我也正在学习Linux,所以很多地方不太对,这只是我现在的一些理解。jiangtao9999说的主要是和汇编有关,如果代码的实现主要是在c语言水平,那么就会由编译器屏蔽掉指令集和寄存器什么的。
9、要是在百度回答的答案能改改就好了,这样错误就会少一点。
10、重新罗嗦一遍:
1在不重新编译源代码的情况下,x86下linux的软件不可以运行于arm构架的Linux,即使运行也会奇卡。
2和在编译是否时为X86的CPU构架优化了编译无关。(把我问迷糊了,估计是无关)
3软件在编译时是否为X86的CPU构架而优化主要看作者了,资料可以参看http://www.gentoo.org/doc/zh_cn/gcc-optimization.xml
4和不同的安装包格式有一定关系
5tar.gz格式的软件包不能保证在不同架构的Linux都能运行
6在arm的linux安装时解决依赖以后,乳沟编译通过基本是没什么问题的
7不是所有源代码在arm和x86下编译一下就可以了,还需要做一些努力
8有源代码可以对遇到的不通过的问题逐一解决,理论上可以实现所有软件都能运行
9重新编译过程中如果遇到依赖问题需要逐一解决
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-19
源代码需要针对性编写。
虽然大部分源代码可以通用,但问题是有些软件有特别架构的指令优化,比如 Intel 的 SSE ,AMD 的 3DNow 。arm 是没有的,但 ARM 也有自己的优化代码。
其次还有数据对齐的问题,不过现在大部分都是编译器自动处理了。还有就是位运算。当然还有寄存器数量不同导致的差别。

至于不重新编译,那根本不可能跨 CPU 架构。目前来说,重新编译后大部分都能用。但也只是理论上。arm 的性能配置不如 x86 ,很多程序就算能运行也很烂。
要想跨架构不重新编译运行,用解释型语言吧,比如 java perl python 什么的。
不过在这之前,楼主还是先去看看架构相关问题吧。
针对 Intel CPU 的 x86 编译的程序,有可能到了 AMD CPU 上就不能运行或者运行缓慢。这个也是很常见的。
第2个回答  2011-03-19
这两个架构的指令集是不一样的,ARM是简单指令集,指令集长度短,所以软件不能通用的。
第3个回答  2021-01-18
跨平台语言可以,python,java,基本是百分之百运行
不是跨平台的,不编译不行,编译了可能也不行,这个太复杂
第4个回答  2011-03-19
相似回答