【问题标题】:Do I need to recompile for another processor arc?我需要为另一个处理器弧重新编译吗?
【发布时间】:2019-04-19 11:42:52
【问题描述】:
我试图以比“什么是编译器(做什么)?”更详细的方式来理解整个“编译”主题。那里的文章。
对我来说,一个大问题是直接编译为机器代码(例如 C)时对处理器和操作系统平台的依赖性。我尝试提出需要解决的具体问题,以使我的画面更清晰:
我在 Linux 发行版上通过 gcc 编译我的 C 代码...:
- 我可以在任何其他 Linux 发行版上运行生成的可执行文件吗?
- 该可执行文件是否绑定了编译的处理器平台?我需要搜索另一个吗?运行 x86 发行版时的 power-pc gcc?
- 我可以在 Windows 上以某种方式执行此操作吗?我知道可执行文件不同,但二进制代码是一样的,不是吗?
所以最后我的问题是:编译是针对特定的操作系统平台、处理器平台还是两者兼而有之?
谢谢!
【问题讨论】:
标签:
compilation
cross-platform
programming-languages
bytecode
machine-code
【解决方案1】:
编译目标、操作系统和架构。
需要针对操作系统,因为:
-
“可执行文件”文件的格式因操作系统而异。
- 程序调用操作系统,即使是常见的任务,例如写入控制台、读取文件或干净地终止(POSIX 等标准通过在程序和操作系统之间定义一个公共层来减轻操作系统依赖性)操作系统)。
必须针对 CPU 架构,因为 CPU 指令是不同的,即使在不同代的“相同架构”之间也是如此。
- 我可以在任何其他 Linux 发行版上运行生成的可执行文件吗?
一般来说,是的,但在特定情况下,它可能取决于程序类型(f.i. GUI)和操作系统上假定可用的服务。
- 该可执行文件是否绑定了编译的处理器平台?我需要搜索另一个吗?运行 x86 发行版时的 power-pc gcc?
我不明白你所说的 “搜索” 是什么意思,但是,是的,你可以交叉编译,比如说, x86 以 PPC 为目标。
- 我可以在 Windows 上以某种方式执行此操作吗?我知道可执行文件不同,但二进制代码是一样的,不是吗?
现在 Windows 已经集成了 Ubuntu,这允许一些例外情况,但由于上述原因,一般的答案是否。