【问题标题】:Is there a gcc option to print the target triplet when cross-compiling?交叉编译时是否有 gcc 选项来打印目标三元组?
【发布时间】:2015-02-13 17:45:53
【问题描述】:

gcc -dumpmachine 几乎是完美的,但它不尊重影响目标的标志。另一方面,clang 会:

$ gcc -dumpmachine
x86_64-unknown-linux-gnu
$ gcc -dumpmachine -m32
x86_64-unknown-linux-gnu
$ clang -dumpmachine
x86_64-unknown-linux-gnu
$ clang -dumpmachine -m32
i386-unknown-linux-gnu

【问题讨论】:

  • 可能不会,就 GCC 编译器本身而言,-m32 不会更改目标,就像 -march=i486 不会将目标更改为 i486-unknown-linux-gnu。
  • 我认为答案是否定的。虽然 clang 行为看起来很有用(特别是如果 -m32 结果也支持 -march 选项,例如,如果合适,打印 i686-...)
  • 注: -m32 不是“交叉编译”,它只是使用相同架构的不同指令集,它被称为 multilib 目标。
  • @JonathanWakely 实际上我认为clang 会这样做,但事实并非如此;即使-march-armv7-a 将导致其目标从armv5te-... 更改为arm7-...,-dumpmachine 输出保持不变。跛脚!

标签: gcc clang cross-compiling compiler-options


【解决方案1】:

也许-print-multiarch 很有用。根据文档,此选项“显示目标的规范化 GNU 三元组,用作库路径中的组件”。

在我的盒子 (x86_64) 中,我得到:

$ gcc -print-multiarch
x86_64-linux-gnu
$ gcc -print-multiarch -m32
i386-linux-gnu

【讨论】:

  • 这将是完美的,除了它在我的计算机上打印的所有内容都是一个换行符:/
  • 哎呀,可惜了。我在这里了解了这个选项:wiki.debian.org/Multiarch/Tuples。显然它是在 gcc 4.7 的上游集成的。
猜你喜欢
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 2011-07-05
相关资源
最近更新 更多