¿Por qué gcc show `unknown` en Target: x86_64-unknown-linux-gnu en Arch Linux?


12

Me gustaría saber por qué cuando ejecuto gcc -vbajo Arch Linux, muestra la unknownpalabra en estas salidas:

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

mientras que en otra distribución, como ubuntu, muestra el nombre de la distribución, 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

¿De dónde instaló este gcc?
— Faheem Mitha

gccfueron instalados con los corepaquetes cuando estaba instalando Arch.
— noslin005

Okay. ¿Quizás entonces verifique las instrucciones de compilación para ese paquete?
— Faheem Mitha

Respuestas:


8

Como ya se mencionó en el comentario, por defecto el triplete objetivo es generado por el script config.guess . Su lógica es bastante simple. Primero se utiliza unamepara obtener información básica del 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

Estas cadenas se combinan y se combinan con patrones codificados. El resultado también está codificado:

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

Para algunos sistemas es posible dar un resultado más significativo, como IBM en "rs6000-ibm-aix".

Los mantenedores de distribución simplemente anulan esta cadena con la suya propia (también 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

GCC 6 probablemente generará x86_64-pc-linux-gnu de forma predeterminada: config.guess actualizado en el repositorio ascendente.


Es sorprendente que GCC 6 se esté desarrollando.
— acgtyrant

OMG, por lo que unknownestá codificado de forma predeterminada.
— acgtyrant

4

Esa es la parte del fabricante de la configuración / triplete objetivo. El Autobook dice sobre eso:

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

El manual de autoconf lo llama company.

No soy un experto en compilación con GCC, pero parece que la información proporcionada por ese campo es más de naturaleza informativa y unknownes solo el valor predeterminado que usa GCC a menos que se sobrescriba explícitamente. GCC en Ubuntu 12.04, por ejemplo x86_64-linux-gnu, usa Debian 7s GCC i486-linux-gnu, por lo que es completamente posible dejar el campo vacío.


Eso es practicamente todo. La x86_64-linux-gnuvariedad son objetivos de acceso directo, de pie para x86_64-unknown-linux-gnuo x86_64-pc-linux-gnu. gcc -vmuestra el destino para el que se compiló y config.subproporciona el triplete canónico (búscalo en /usr/share/miscsistemas derivados de Debian con autotools-devinstalado).
— Stephen Kitt
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.