¿Dónde está GCC-5 después de instalarlo en Solaris 11?


9

Perdone mi ignorancia ... Solo uso Solaris para probar bibliotecas C / C ++ en las que estoy interesado. No soy administrador de Solaris ni usuario de Solaris.

Instalé GCC-5 en Solaris 11.3, x86 porque necesitaba un compilador de C ++ que sea compatible -std=c++11(consulte a continuación la salida del paquete). El GCC nativo de Sun es 4.8 y no es compatible con C ++ 11 (o nada).

Desafortunadamente, no puedo encontrarlo después de la instalación:

$ g++-5 --version
-bash: g++-5: command not found  

$ sudo find /usr -name gcc-5
$ sudo find /bin -name gcc-5
$

Y para completar:

$ /bin/gcc --version
gcc (GCC) 4.8.2
...

$ ls -l /usr/bin/gcc
lrwxrwxrwx   1 root   root   18 Jun  7  2016 /usr/bin/gcc -> ../gcc/4.8/bin/gcc

$ which gcc-5
no gcc-5 in /usr/local/bin /usr/local/sbin /bin /sbin /usr/bin /usr/sbin /usr/sfw/bin

¿Dónde se encuentra el compilador?


De acuerdo con la instalación de GCC en Oracle Solaris 11 en Stack Overflow, se supone que debe estar /usr/bin/gcccomo un enlace simbólico. Pero la respuesta parece estar un poco apagada:

$ /usr/bin/gcc --version
gcc (GCC) 4.8.2
...

Según GCC falta en Solaris 11, y el servidor ya está implementado en Falla del servidor:

/usr/sfw/bines la ruta de gcc incluida con Solaris 10. En Solaris 11.1, gcc está, cuando está instalado, directamente disponible /usr/bincomo un enlace simbólico que apunta a/usr/gcc/<version>/bin/gcc

La respuesta parece estar un poco apagada también.


$ sudo pkg install --accept gcc-5
------------------------------------------------------------
Package: pkg://solaris/release/evaluation@1.0,5.12-5.12.0.0.0.115.0:20170111T175931Z
License: evaluation

This software has been made available for evaluation purposes only.
See http://www.oracle.com/technetwork/server-storage/solaris11/technologies/foss-evaluation-program-2586275.html for further information.        

           Packages to install:  2
       Create boot environment: No
Create backup boot environment: No

DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                2/2           8/8      0.0/0.0 17.4k/s

PHASE                                          ITEMS
Installing new actions                         37/37
Updating package state database                 Done
Updating package cache                           0/0
Updating image state                            Done
Creating fast lookup database                   Done
Updating package cache                           2/2

Después de instalar gcc-5:

$ find / -name 'gcc*' 2>/dev/null
/usr/share/vim/vim73/compiler/gcc.vim
/usr/share/gcc-4.8.2
/usr/share/man/man1/gcc.1
/usr/gcc
/usr/gcc/4.8/bin/gcc-nm
/usr/gcc/4.8/bin/gcc-ranlib
/usr/gcc/4.8/bin/gcc
/usr/gcc/4.8/bin/gcc-ar
/usr/gcc/4.8/lib/gcc
/usr/gcc/4.8/lib/gcc/i386-pc-solaris2.11/4.8.2/plugin/include/ada/gcc-interface
/usr/gcc/4.8/lib/gcc/i386-pc-solaris2.11/4.8.2/plugin/include/gcc-plugin.h
/usr/gcc/4.8/share/locale/de/LC_MESSAGES/gcc.mo
/usr/gcc/4.8/share/locale/ja/LC_MESSAGES/gcc.mo
/usr/gcc/4.8/share/locale/fr/LC_MESSAGES/gcc.mo
/usr/gcc/4.8/share/locale/zh_CN/LC_MESSAGES/gcc.mo
/usr/gcc/4.8/share/locale/zh_TW/LC_MESSAGES/gcc.mo
/usr/gcc/4.8/share/locale/es/LC_MESSAGES/gcc.mo
/usr/gcc/4.8/share/gcc-4.8.2
/usr/gcc/4.8/share/info/gccinstall.info
/usr/gcc/4.8/share/info/gccint.info
/usr/gcc/4.8/share/info/gcc.info
/usr/gcc/4.8/share/man/man1/gcc.1
/usr/bin/gcc
/usr/local/share/emacs/24.5/lisp/cedet/semantic/bovine/gcc.el
/usr/local/share/emacs/24.5/lisp/cedet/semantic/bovine/gcc.elc
/usr/include/gc/atomic_ops/sysdeps/gcc
/usr/include/avahi-common/gccmacro.h
/usr/include/pulse/gccmacro.h
/export/home/jwalton/botan/src/scripts/ci/circle/gcc-sanitizer.sh
/export/home/jwalton/botan/src/scripts/ci/circle/gcc-static-debug.sh
/export/home/jwalton/botan/src/scripts/ci/circle/gcc-shared-debug.sh
/export/home/jwalton/botan/src/build-data/cc/gcc.txt
/export/home/jwalton/zlib-1.2.8/contrib/gcc_gvmat64
/opt/developerstudio12.5/lib/compilers/CC-gcc/lib/gcc
/opt/developerstudio12.5/lib/compilers/CC-gcc/gcc_version.map
/opt/solarisstudio12.4/lib/compilers/CC-gcc/gcc_version.map
/opt/solarisstudio12.4/lib/compilers/CC-gcc/lib/gcc

Y:

~$ pkg search -l gcc | grep ^basename
basename             dir    opt/developerstudio12.5/lib/compilers/CC-gcc/lib/gcc               pkg:/developer/developerstudio-125/library/studio-gccrt@12.5-1.0.0.0
basename             dir    opt/solarisstudio12.4/lib/compilers/CC-gcc/lib/gcc                 pkg:/developer/solarisstudio-124/library/studio-gccrt@12.4-1.0.0.0
basename             dir    usr/include/gc/atomic_ops/sysdeps/gcc                              pkg:/library/gc@7.2-0.175.2.0.0.39.0
basename                    link   usr/bin/gcc                                                        pkg:/developer/gcc-4/gcc-c-48@4.8.2-0.175.3.0.0.30.0
basename                    file   usr/gcc/4.8/bin/gcc                                                pkg:/developer/gcc-4/gcc-c-48@4.8.2-0.175.3.0.0.30.0
pkg: Search performance is degraded.

Trate de usar: gcc --version y no gcc-5 --version
Slh47

1
¿Es / usr / gcc un enlace suave?
FloHe

@FloHe - Ambos /bin/gccy /usr/bin/gccson GCC 4.8. Actualicé la pregunta con la salida de los comandos.

¿estás seguro de que la instalación se completó correctamente?
Rory Alsop

Tal vez intente:which gcc-5
FloHe

Respuestas:


10

TL; DR:

# pkg change-facet \
      version-lock.system/library/gcc/gcc-c-runtime=false \
      version-lock.system/library/gcc/gcc-c++-runtime=false

e intenta de nuevo.

Entonces, el problema es que gcc-5es lo que se conoce como un paquete "grupal". Es decir, consiste (al menos principalmente) en un grupo de groupdependencias. Una groupdependencia es aquella que se instalará si es posible, pero se ignorará si no. En este caso, no fue posible instalar una o más de las dependencias de gcc-5, por lo que se ignoraron y terminó con menos de lo que esperaba.

Cuando eso sucede (ya sea menos paquetes o paquetes en una versión diferente), lo primero que debe hacer es decir pkglo que realmente espera. (Ahora, la desconexión aquí es cómo saber qué esperar; sin saber cómo inspeccionar gcc-5esa información, o incluso sin saber que podría tener que hacerlo, no estoy seguro de cómo responder eso). En este caso, elija uno de sus dependencias para ver si ayuda; diga, gcc-c-5(siguió este paso para gcc-c++-5, que le dio el mismo problema que muestro aquí, pero quería poner todo junto en una respuesta). Esto le dice que pkgno ignore su incapacidad para instalar gcc-c-5, sino que se queje en detalle sobre por qué no se pudo instalar. Esperemos que haya algo en la salida que nos dé una pista sobre qué hacer a continuación:

# pkg install -nv gcc-5 gcc-c-5
Creating Plan (Solver setup): |
pkg install: No matching version of developer/gcc-5 can be installed:
  Reject:  pkg://solaris/developer/gcc-5@5.4.0-5.12.0.0.0.115.0
  Reason:  No version matching 'group' dependency developer/gcc/gcc-c++-5 can be installed
    ----------------------------------------
    Reject:  pkg://solaris/developer/gcc/gcc-c++-5@5.4.0-5.12.0.0.0.115.0
    Reason:  No version matching 'require' dependency developer/gcc/gcc-c-5 can be installed
      ----------------------------------------
      Reject:  pkg://solaris/developer/gcc/gcc-c-5@5.4.0-5.12.0.0.0.115.0
      Reason:  No version matching 'require' dependency system/library/gcc/gcc-c++-runtime@5.4.0,5.11-5.12.0.0.0.115.0 can be installed
        ----------------------------------------
        Reject:  pkg://solaris/system/library/gcc/gcc-c++-runtime@5.4.0-5.12.0.0.0.115.0
        Reason:  No version matching 'require' dependency system/library/gcc/gcc-c-runtime@5.4.0,5.11-5.12.0.0.0.115.0 can be installed
          ----------------------------------------
          Reject:  pkg://solaris/system/library/gcc/gcc-c-runtime@5.4.0-5.12.0.0.0.115.0
          Reason:  This version is excluded by installed incorporation consolidation/userland/userland-incorporation@0.5.11-0.175.3.19.0.2.0
          ----------------------------------------
        Reason:  This version is excluded by installed incorporation consolidation/userland/userland-incorporation@0.5.11-0.175.3.19.0.2.0
        ----------------------------------------
      ----------------------------------------
    ----------------------------------------
No matching version of developer/gcc/gcc-c-5 can be installed:
  Reject:  pkg://solaris/developer/gcc/gcc-c-5@5.4.0-5.12.0.0.0.115.0
  Reason:  [already rejected; see above]

Cuando obtiene un desorden de salida de solucionador como este, generalmente desea buscar el problema más profundo y ver si puede corregirlo. En este caso, verá que no se puede instalar gcc-c-runtime@5.4.0-5.12.0.0.0.115.0porque está excluido por una incorporación instalada.

Quizás sea necesaria una digresión: ¿qué es una incorporación? Al igual que un paquete grupal, es un paquete que entrega principalmente dependencias, en este caso, incorporatedependencias. Estas dependencias nunca hacen que se instalen paquetes; simplemente imponen restricciones a los paquetes que pueden instalarse. Específicamente, incorporar foo@1.2significa que si fooestá instalado, debe estar en el rango de versiones [1.2, 1.3); es decir, un mínimo de 1.2(inclusivo) y un máximo de 1.3(exclusivo), o cualquier cosa que coincida 1.2.x.y.z.....

En este caso, la incorporación userland-incorporationque ya está instalada en el sistema ha impuesto una restricción gcc-c-runtimeque es incompatible con la versión gcc-c-runtimeque gcc-c-5requiere la instalación .

Ahí es donde nos encontramos con una de las rarezas del programa de evaluación Solaris FOSS. Los paquetes disponibles allí no están bien integrados con el resto del sistema; están diseñados para instalarse en una versión más nueva de Solaris. Pero han sido construidos de tal manera que al menos el sistema puede ser masajeado para que se instalen. En este caso, tienes que cambiar algunas facetas.

La mayoría de los paquetes de FOSS en Solaris se incorporan de tal manera que la restricción entregada por esa incorporatedependencia se puede relajar. Puede hacerlo cambiando la faceta nombrada por version-lock.<pkg-name>a false. En este caso, gcc-c-runtimey gcc-c++-runtimeson los dos paquetes que bloquean la instalación que desea, entonces (como arriba):

# pkg change-facet \
      version-lock.system/library/gcc/gcc-c-runtime=false \
      version-lock.system/library/gcc/gcc-c++-runtime=false

Esto dará un poco de salida, pero aparentemente no hará mucho. Sin embargo, una vez hecho, podemos intentarlo de nuevo:

# pkg install -nv gcc-5 gcc-c-5
           Packages to install:      20
            Packages to update:       2
           Mediators to change:       1
            Services to change:       1
     Estimated space available: 8.54 GB
Estimated space to be consumed: 1.49 GB
       Create boot environment:      No
Create backup boot environment:     Yes
          Rebuild boot archive:      No

Changed mediators:
  mediator gcc:
           version: None -> 5 (system default)

Changed packages:
solaris
  developer/assembler
    None -> 0.5.11,5.11-0.175.3.9.0.2.0:20160528T012706Z
  developer/gcc-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T170530Z
  developer/gcc/gcc-c++-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T164822Z
  developer/gcc/gcc-c-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T165027Z
  developer/gcc/gcc-common-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T165220Z
  developer/gcc/gcc-gfortran-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T165431Z
  developer/gcc/gcc-gobjc-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T165624Z
  developer/gnu-binutils
    None -> 2.23.1,5.11-0.175.3.0.0.30.0:20150821T164528Z
  library/gmp
    None -> 4.3.2,5.11-0.175.3.0.0.30.0:20150821T165358Z
  library/isl
    None -> 0.12.2,5.12-5.12.0.0.0.115.0:20170111T171737Z
  library/mpc
    None -> 0.9,5.11-0.175.3.0.0.30.0:20150821T165558Z
  library/mpfr
    None -> 2.4.2,5.11-0.175.3.0.0.30.0:20150821T165559Z
  release/evaluation
    None -> 1.0,5.12-5.12.0.0.0.115.0:20170111T175931Z
  system/header
    None -> 0.5.11,5.11-0.175.3.19.0.2.0:20170328T014052Z
  system/library/gcc/gcc-c++-runtime-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181800Z
  system/library/gcc/gcc-c-runtime-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181840Z
  system/library/gcc/gcc-gfortran-runtime
    None -> 4.8.2,5.11-0.175.3.0.0.30.0:20150821T172507Z
  system/library/gcc/gcc-gfortran-runtime-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181902Z
  system/library/gcc/gcc-gobjc-runtime
    None -> 4.8.2,5.11-0.175.3.0.0.30.0:20150821T172513Z
  system/library/gcc/gcc-gobjc-runtime-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181919Z
  system/library/gcc/gcc-c++-runtime
    4.8.2,5.11-0.175.3.0.0.30.0:20150821T172447Z -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181825Z
  system/library/gcc/gcc-c-runtime
    4.8.2,5.11-0.175.3.0.0.30.0:20150821T172458Z -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181848Z

Y listo, tenemos un montón de paquetes instalados, que en realidad contienen cosas. A partir de aquí, ahora debería poder escribir gcc --versiony ver que de hecho es 5.4.0. Tenga en cuenta también que los dos paquetes cuyas facetas desbloqueamos se actualizaron, una posibilidad disponible después del desbloqueo.

Puede preguntar por qué no necesitamos desbloquear otras facetas. La razón de esto es que Solaris 11.3 no entregó GCC 5, por lo que no entregó ninguna restricción en sus versiones de paquete. Por lo tanto, todos los gcc-*-5paquetes ya no están restringidos y no necesitan ser desbloqueados para relajar las restricciones.

Puede notar que los paquetes gcc-gfortran-runtimey gcc-gobjc-runtimese instalaron en sus versiones 4.8. Eso es porque todavía están restringidos, pero nada de lo que hicimos entró en conflicto con esas restricciones. Para mantener la coherencia, es probable que también deba desbloquearlos y luego actualizarlos a sus versiones 5.x (o, si ha llegado tan lejos antes de intentar algo, simplemente desbloquéelos desde el principio).


Gracias @Danek, y perdón por la respuesta tardía. Estoy en otro ciclo de prueba de Solaris. Corrí pkg change-facetseguido de pkg install -nv gcc-5 gcc-c-5. El resultado fue limpio, lo que significa que no vi errores o resultados como los detallados en la ruta de rechazo. Posteriormente, GCC sigue siendo 4.8.2 y gcc-5 --versionda como resultado gcc-5: command not found. Todavía me parece que me falta algo.

Se encuentran diferentes versiones de gcc /usr/gcc. No enviamos /usr/bin/gcc-<version>, aunque puede ser un error que valga la pena presentar. Se puede utilizar /usr/gcc/5/bin/gccdirectamente, o puede indicar al sistema de envasado que cosa debe estar en /usr/bin/gcc: pkg set-mediator -V 5 gcc.
Danek Duvall

1

Prueba esto:

ls -l /usr/bin/gcc

Probablemente veas algo como

... /usr/bin/gcc -> ../gcc/4.8/bin/gcc

GCC 5.x debería estar en /usr/gcc/5.x/...

Mi instalación de Solaris 11 tiene varias versiones de GCC bajo /usr/gcc.

Actualización : y ninguna de esas versiones /usr/gcces una versión 5.x. ¿A dónde fue?


Gracias Andrew No tengo una /usr/gcc/5.x/instalación posterior. ¿Cómo instaló GCC 5.x?

@jww Tengo un montón de diferentes versiones 4.x. No 5, sin embargo?!?! Extraño. Voy a tener que investigar esto.
Andrew Henle

@jww ¿Qué pkg search gccmuestra? Las basenameentradas deben mostrar todas las versiones del gcccomando instalado en su sistema.
Andrew Henle

@jww Línea 287: basename file usr/gcc/5.3/bin/gcc pkg:/developer/gcc/gcc-c-53@5.3.0-5.12.0.0.0.95.0 Eso parece indicar que debería tener una /usr/gcc/5.3/bin/gccinstalada. La línea 289 también muestra una 5.3.0-5.12.0.0.0.105.1versión. ¿Qué pkg search -l gcc | grep ^basenamemuestra? Eso debería mostrar solo los archivos nombrados gccque están realmente instalados.
Andrew Henle

Añadido a la pregunta (último bloque).

1

Primero, una lista de pkg publishersería útil. Así como unpkg list |grep gcc

Y no parece que se haya instalado, su salida solo muestra (2) paquetes y (8) archivos instalados.

Es posible que deba liberar las restricciones para poder instalar. Su salida de la instalación sugiere que está instalando desde la cadena de evaluación de FOSS. Le sugerimos que revise junto con el enlace proporcionado en su salida:

Cómo acceder a los paquetes de evaluación FOSS seleccionados para Oracle Solaris 11.3

Además: ¿normalmente pkg search gccdebería ayudar a encontrar dónde se instaló algo, así como el paquete? A pkg contents <pkg>también es útil para encontrar lo que constituye un paquete.

También esperaba ver múltiples paquetes instalados frente a solo 2, ya que creo que el paquete gcc debería intentar instalar múltiples paquetes para todas las herramientas de desarrollador.

¿Quizás este es el paquete que deseas bajo el repositorio de lanzamiento? developer/gcc/gcc-c++-5


Gracias. sudo pkg install developer/gcc/gcc-c++-5resultados Reject: pkg://solaris/developer/gcc/gcc-c++-5@5.4.0-5.12.0.0.0.115.0con Reason: No version matching 'require' dependency system/library/gcc/gcc-c-runtime@5.4.0,5.11-5.12.0.0.0.115.0 can be installed.

Pruebe una `pkg list -a | grep c ++` para buscar una versión de gcc. Y antes de la instalación real, intente una instalación detallada de ejecución en seco para ver si eso le brinda información sobre la causa de la falla. es decir: pkg install -nv <pkg> ¿Revisó el enlace de arriba para usar los pkgs de evaluación? Todavía tengo que intentar usar los pkgs eval, pero parece que es posible que necesites desbloquear algunos de los pkgs para instalarlos / actualizarlos.
Sleepyweasel
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.