交叉编译时是不是有 gcc 选项来打印目标三元组?
Posted
技术标签:
【中文标题】交叉编译时是不是有 gcc 选项来打印目标三元组?【英文标题】: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
输出保持不变。跛脚!
【参考方案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 的上游集成的。以上是关于交叉编译时是不是有 gcc 选项来打印目标三元组?的主要内容,如果未能解决你的问题,请参考以下文章
交叉编译:特殊的交叉编译器或只是带有选项 -march 的 gcc?
GCC编译器原理------交叉编译器制作和GCC组件及命令