gcc编译器如何生成独立于机器/处理器的二进制文件?

时间:2016-08-08 13:38:23

标签: gcc binaryfiles

我的问题可能有点虚假,但我一直都有这个问题。

gcc在编译时如何确定构建的目标机器/处理器是什么?

gcc / g ++生成的指令是否与目标系统无关?

例如我有一台基于intel,基于AMD,基于摩托罗拉的系统的x86_64机器......

所有处理器是否都具有相同的指令集和操作码?

如果不是gcc生成的机器代码/二进制文件有某种运行时检查?

提前感谢您的回答。

1 个答案:

答案 0 :(得分:0)

这有点复杂。这取决于在安装过程中如何配置和编译 GCC 。在我的Ubuntu 16.04 x64系统上有一个 GCC 安装。

如果在终端我键入gcc -v,我将获得--target=x86_64-linux-gnu,这意味着 GCC 将为x64 Linux生成代码。 --host=x86_64-linux-gnu表示 GCC 本身就是x64 linux应用程序。更多内容来自link

另一个有用的输出是--with-multilib-list=m32,m64,mx32 - 这意味着我可以编译默认的64位应用程序和两种类型的32位应用程序(-m32和-mx32)。

最后但并非最不重要的是--with-tune=generic,这意味着将为某些通用 x64平台编译应用程序,用户应该能够在x64 Linux机器上的任何位置运行它们。

有两种选项可以覆盖 - -march-mtune。 Arch选项将告诉编译器使用特定于给定CPU的指令。 Tune将调整代码生成以适应最佳CPU。 CPU是特定平台(例如,sandbridge),通用平台(通常是默认)或native,其中 GCC 在编译期间将检查主机CPU并执行代码生成/调整它

最后一组选项包括FPU的设置 - 您可以选择使用哪个单位(x87或SSE2 +),指令集(SSE2,3,4,AVX)等。进入此link。< / p>