交叉编译时是不是有 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?

Ubuntu安装交叉编译器gcc

GCC编译器原理------交叉编译器制作和GCC组件及命令

cygwin 中如何安装arm-linux-gcc交叉编译器

gcc的使用简介与命令行参数说明

gcc 链接选项以查看为啥某些目标文件链接到二进制文件