为什么gcc在Arch Linux中在目标:x86_64-unknown-linux-gnu中显示“未知”?


12

我想知道为什么gcc -v在Arch Linux下运行时,unknown在以下输出中显示该词:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/5.1.0/lto-wrapper
Target: x86_64-unknown-linux-gnu

在其他发行版中,例如ubuntu,它显示发行版名称,例如ubuntu

 Using built-in specs.
 COLLECT_GCC=gcc
 COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-ubuntu-linux-gnu/5.1.0/lto-wrapper
 Target: x86_64-ubuntu-linux-gnu

您是从哪里安装此gcc的?
Faheem Mitha 2015年

gcccore我在安装Arch时随软件包一起安装。
noslin005 2015年

好。也许查看该软件包的编译说明,然后呢?
Faheem Mitha 2015年

Answers:


8

正如评论中已经提到的,默认情况下,目标三元组由config.guess脚本生成。逻辑很简单。首先,它用于uname获取一些基本的系统信息:

UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown

这些字符串被组合并与硬编码模式匹配。结果也被硬编码:

case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
...(snip)...
    x86_64:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
...(snip)...

对于某些系统,可以给出更有意义的结果,例如“ rs6000-ibm-aix”中的IBM。

分发维护者只需使用自己的字符串(也进行硬编码)覆盖此字符串:

$ gcc -v
...(snip)...
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.9.2-10'
...(snip)...
--target=x86_64-linux-gnu

默认情况下,GCC 6可能会输出x86_64-pc-linux-gnu:在上游存储库中更新了config.guess


令人惊奇的是,GCC 6正在开发中。
acgrantant 2015年

OMG,因此unknown默认情况下为硬编码。
acgtyrant 2015年

4

这是配置/目标三元组的制造商部分。该Autobook说有关:

manufacturer
   A somewhat freeform field which indicates the manufacturer of the system. This is often simply `unknown'. Other common strings are `pc' for an IBM PC compatible system, or the name of a workstation vendor, such as `sun'.

autoconf的手动调用它company

我不是GCC编译的专家,但听起来该字段提供的信息更多是信息性质的,unknown只是GCC使用的默认值,除非明确覆盖。例如x86_64-linux-gnu,在Ubuntu 12.04上的GCC使用Debian 7s GCC i486-linux-gnu,因此完全可以将该字段保留为空。


就是这样。该x86_64-linux-gnu品种是快捷方式的目标,站立x86_64-unknown-linux-gnux86_64-pc-linux-gnugcc -v显示其被编译的目标,并config.sub给出规范的三元组(在已安装/usr/share/miscDebian的系统上查找autotools-dev)。
史蒂芬·基特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.