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