【问题标题】:Does GCC support multiple target architectures?GCC 是否支持多个目标架构?
【发布时间】:2014-01-02 11:03:27
【问题描述】:

是否可以编译支持多个目标架构的单个gcc(前端)二进制文件,我可以在命令行中选择,如下所示:

$ gcc --architecture=linux-i386 ...
$ gcc --architecture=freebsd-arm ...
$ gcc --architecture=darwin-amd64 ...

我知道可以将 gcc 构建为交叉编译器,但是否可以使用命令行标志选择目标架构,而无需编写为每个架构启动不同 gcc 二进制文件的包装脚本?

对于 i386 和 amd64 -m32 和 -m64 似乎可以解决问题,但是如何选择 ARM 等?请注意,-march= 对我来说毫无用处,我无法将其从 i386 更改为 amd64。

【问题讨论】:

  • 如果你想切换到 ARM,通常你会使用交叉编译器。您是否有任何特殊原因希望将其作为编译器标志而不是别名?

标签: gcc cpu-architecture


【解决方案1】:

简短的回答是“不”,你不能。有一些类型的交叉编译器,但是对于一个能够支持一堆目标的二进制文件来说,它需要工具非常庞大,并且需要系统头文件。

【讨论】:

  • clang 做得很好,gcc 也有一个(非常)长期的目标......
  • @MarcGlisse 在哪里可以了解 gcc 的这个目标、它的状态等?连谷歌都帮不了我找。
  • AFAIK,现在只有几个 cmets,更喜欢结构成员而不是全局变量,诸如此类,但没有人积极朝着这个目标努力。那是因为这不是优先事项,但如果有人朝这个方向贡献补丁,我相信他们会受到欢迎。
【解决方案2】:

功能多版本有https://gcc.gnu.org/wiki/FunctionMultiVersioning,包括自动调度;

版本控制仍然是手动的;未实现针对不同架构的自动多版本控制;这是对它的功能请求https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78464

【讨论】:

  • 这是关于一个目标中不同级别的 ISA 扩展。问题是询问 clang -c -target mips foo.c 的 GCC 等价物或其他什么,它适用于您的 x86-64 桌面上的 x86-64 clang
  • 感谢您的帮助。看起来这使得在同一个二进制文件中定位 ARM 和 amd64 成为可能(正如我在问题中所写的那样)。
猜你喜欢
  • 2021-08-27
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多