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/gcc
como 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/bin
es la ruta de gcc incluida con Solaris 10. En Solaris 11.1, gcc está, cuando está instalado, directamente disponible/usr/bin
como 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/[email protected],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/[email protected]
basename dir opt/solarisstudio12.4/lib/compilers/CC-gcc/lib/gcc pkg:/developer/solarisstudio-124/library/[email protected]
basename dir usr/include/gc/atomic_ops/sysdeps/gcc pkg:/library/[email protected]
basename link usr/bin/gcc pkg:/developer/gcc-4/[email protected]
basename file usr/gcc/4.8/bin/gcc pkg:/developer/gcc-4/[email protected]
pkg: Search performance is degraded.
fuente
/bin/gcc
y/usr/bin/gcc
son GCC 4.8. Actualicé la pregunta con la salida de los comandos.which gcc-5
Respuestas:
TL; DR:
e intenta de nuevo.
Entonces, el problema es que
gcc-5
es lo que se conoce como un paquete "grupal". Es decir, consiste (al menos principalmente) en un grupo degroup
dependencias. Unagroup
dependencia 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 degcc-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
pkg
lo que realmente espera. (Ahora, la desconexión aquí es cómo saber qué esperar; sin saber cómo inspeccionargcc-5
esa 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 paragcc-c++-5
, que le dio el mismo problema que muestro aquí, pero quería poner todo junto en una respuesta). Esto le dice quepkg
no ignore su incapacidad para instalargcc-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: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
[email protected]
porque 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,
incorporate
dependencias. Estas dependencias nunca hacen que se instalen paquetes; simplemente imponen restricciones a los paquetes que pueden instalarse. Específicamente, incorporar[email protected]
significa que sifoo
está instalado, debe estar en el rango de versiones[1.2, 1.3)
; es decir, un mínimo de1.2
(inclusivo) y un máximo de1.3
(exclusivo), o cualquier cosa que coincida1.2.x.y.z....
.En este caso, la incorporación
userland-incorporation
que ya está instalada en el sistema ha impuesto una restriccióngcc-c-runtime
que es incompatible con la versióngcc-c-runtime
quegcc-c-5
requiere 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
incorporate
dependencia se puede relajar. Puede hacerlo cambiando la faceta nombrada porversion-lock.<pkg-name>
afalse
. En este caso,gcc-c-runtime
ygcc-c++-runtime
son los dos paquetes que bloquean la instalación que desea, entonces (como arriba):Esto dará un poco de salida, pero aparentemente no hará mucho. Sin embargo, una vez hecho, podemos intentarlo de nuevo:
Y listo, tenemos un montón de paquetes instalados, que en realidad contienen cosas. A partir de aquí, ahora debería poder escribir
gcc --version
y 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-*-5
paquetes ya no están restringidos y no necesitan ser desbloqueados para relajar las restricciones.Puede notar que los paquetes
gcc-gfortran-runtime
ygcc-gobjc-runtime
se 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).fuente
pkg change-facet
seguido depkg 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 ygcc-5 --version
da como resultadogcc-5: command not found
. Todavía me parece que me falta algo./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/gcc
directamente, o puede indicar al sistema de envasado que cosa debe estar en/usr/bin/gcc
:pkg set-mediator -V 5 gcc
.Prueba esto:
Probablemente veas algo como
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/gcc
es una versión 5.x. ¿A dónde fue?fuente
/usr/gcc/5.x/
instalación posterior. ¿Cómo instaló GCC 5.x?pkg search gcc
muestra? Lasbasename
entradas deben mostrar todas las versiones delgcc
comando instalado en su sistema.basename file usr/gcc/5.3/bin/gcc pkg:/developer/gcc/[email protected]
Eso parece indicar que debería tener una/usr/gcc/5.3/bin/gcc
instalada. La línea 289 también muestra una5.3.0-5.12.0.0.0.105.1
versión. ¿Quépkg search -l gcc | grep ^basename
muestra? Eso debería mostrar solo los archivos nombradosgcc
que están realmente instalados.Primero, una lista de
pkg publisher
serí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 gcc
debería ayudar a encontrar dónde se instaló algo, así como el paquete? Apkg 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
fuente
sudo pkg install developer/gcc/gcc-c++-5
resultadosReject: pkg://solaris/developer/gcc/[email protected]
conReason: No version matching 'require' dependency system/library/gcc/[email protected],5.11-5.12.0.0.0.115.0 can be installed
.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.