我的问题可能有点虚假,但我一直都有这个问题。
gcc在编译时如何确定构建的目标机器/处理器是什么?
gcc / g ++生成的指令是否与目标系统无关?
例如我有一台基于intel,基于AMD,基于摩托罗拉的系统的x86_64机器......
所有处理器是否都具有相同的指令集和操作码?
如果不是gcc生成的机器代码/二进制文件有某种运行时检查?
提前感谢您的回答。
答案 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>