Por que o gcc mostra 'unknown' no Target: x86_64-unknown-linux-gnu no Arch Linux?

9

Eu gostaria de saber por que quando eu executo gcc -v no Arch Linux, ele mostra a unknown word nestas saídas:

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

enquanto em outra distro, como o ubuntu, ele mostra o nome da distro, como 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
    
por noslin005 29.05.2015 / 23:33

2 respostas

8

Como já foi mencionado no comentário, por padrão, o trio de destino é gerado por config.guess . Sua lógica é bastante simples. Primeiro, ele usa uname para obter algumas informações básicas do sistema:

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

Essas cadeias são combinadas e combinadas com padrões codificados. O resultado também é codificado:

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

Para alguns sistemas, é possível fornecer resultados mais significativos, como o IBM em "rs6000-ibm-aix".

Os mantenedores de distribuição simplesmente sobrescrevem essa string com a sua própria (também codificada):

$ 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

O GCC 6 provavelmente exibirá x86_64-pc-linux-gnu por padrão: atualizado config.guess no repositório upstream.

    
por 29.08.2015 / 00:24
4

Essa é a parte do fabricante do trio de configuração / destino. O Autobook diz sobre isso:

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'.

O manual do autoconf chama isso de company .

Não sou especialista em compilação com o GCC, mas parece que as informações fornecidas por esse campo são mais informativas e unknown é apenas o valor padrão que o GCC usa, a menos que explicitamente substituído. O GCC no Ubuntu 12.04, por exemplo, usa x86_64-linux-gnu , Debian 7s GCC i486-linux-gnu , então é perfeitamente possível deixar o campo vazio.

    
por 30.05.2015 / 10:26