Por favor, perdoe minha ignorância ... Eu só uso o Solaris para testar bibliotecas C / C ++ nas quais tenho interesse. Não sou administrador do Solaris ou usuário do Solaris.
Instalei o GCC-5 no Solaris 11.3, x86 porque precisava de um compilador C ++ compatível -std=c++11
(veja abaixo a saída do pacote). O GCC nativo da Sun é 4.8 e não suporta bem o C ++ 11 (ou de todo).
Infelizmente, não consigo encontrá-lo após a instalação:
$ g++-5 --version
-bash: g++-5: command not found
$ sudo find /usr -name gcc-5
$ sudo find /bin -name gcc-5
$
E 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
Onde está localizado o compilador?
De acordo com o Instalando o GCC no Oracle Solaris 11 no Stack Overflow, ele deveria estar /usr/bin/gcc
como um link simbólico. Mas a resposta parece estar um pouco errada:
$ /usr/bin/gcc --version
gcc (GCC) 4.8.2
...
De acordo com o GCC ausente no Solaris 11, e o servidor já implantado na falha do servidor:
/usr/sfw/bin
é o caminho do gcc incluído no Solaris 10. No Solaris 11.1, o gcc é, quando instalado, diretamente disponível/usr/bin
como um link simbólico que aponta para/usr/gcc/<version>/bin/gcc
A resposta parece estar um pouco errada também.
$ 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
Após a instalação 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
E:
~$ 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.
fonte
/bin/gcc
e/usr/bin/gcc
são GCC 4.8. Atualizei a pergunta com a saída dos comandos.which gcc-5
Respostas:
TL; DR:
e tente novamente.
Portanto, a questão é que
gcc-5
é conhecido como pacote "grupo". Ou seja, consiste (pelo menos principalmente) em váriasgroup
dependências. Umagroup
dependência é aquela que será instalada se possível, mas ignorada se não. Nesse caso, não foi possível instalar uma ou mais dependências degcc-5
, portanto elas foram ignoradas e você acabou com menos do que o esperado.Quando isso acontece (seja menos pacotes ou pacotes em uma versão diferente), a primeira coisa que você deve fazer é dizer
pkg
o que realmente espera. (Agora, a desconexão aqui é como saber o que esperar; sem saber como inspecionargcc-5
essas informações, ou mesmo sabendo que você pode precisar, não sei como responder isso.) Nesse caso, escolha um dos suas dependências para ver se ajuda; digamos,gcc-c-5
(você seguiu esta etapagcc-c++-5
, o que lhe deu o mesmo problema que mostro aqui, mas eu queria reunir tudo em uma resposta). Isso dizpkg
para não ignorar sua incapacidade de instalargcc-c-5
, mas para realmente reclamar em detalhes sobre o motivo pelo qual não pôde ser instalado. Espero que haja algo na saída para nos dar uma pista sobre o que fazer a seguir:Quando você obtém uma confusão de resultados do solucionador como esse, normalmente deseja procurar o problema mais profundo e identificar se é possível corrigi-lo. Nesse caso, você vê que não pode instalar
[email protected]
porque está excluído por uma incorporação instalada.Talvez seja necessária uma digressão: o que é uma incorporação? Como um pacote de grupo, é um pacote que entrega principalmente dependências, nesse caso,
incorporate
dependências. Essas dependências nunca fazem com que os pacotes sejam instalados; eles simplesmente impõem restrições aos pacotes que podem ser instalados. Especificamente, incorporar[email protected]
significa que, sefoo
estiver instalado, ele deverá estar no intervalo de versões[1.2, 1.3)
; isto é, um mínimo de1.2
(inclusive) e um máximo de1.3
(exclusivo) ou qualquer coisa que corresponda1.2.x.y.z....
.Nesse caso, a incorporação
userland-incorporation
que já está instalada no sistema impôs uma restriçãogcc-c-runtime
incompatível com a versãogcc-c-runtime
exigida pela instalaçãogcc-c-5
.É aí que encontramos uma das esquisitices do programa de avaliação Solaris FOSS. Os pacotes disponibilizados não estão bem integrados ao restante do sistema; eles foram projetados para serem instalados em uma versão mais recente do Solaris. Mas eles foram construídos de forma que o sistema possa pelo menos ser massageado de maneira saudável para permitir a instalação. Nesse caso, você precisa alterar algumas facetas.
A maioria dos pacotes FOSS no Solaris é incorporada de forma que a restrição fornecida por essa
incorporate
dependência possa ser relaxada. Você pode fazer isso alterando a faceta nomeada porversion-lock.<pkg-name>
parafalse
. Nesse caso,gcc-c-runtime
egcc-c++-runtime
os dois pacotes estão bloqueando a instalação que você deseja, então (como acima):Isso dará um pouco de saída, mas aparentemente não faz muito. Uma vez feito, porém, podemos tentar novamente:
E pronto, temos um monte de pacotes instalados, que realmente contêm coisas. A partir daqui, você deve ser capaz de digitar
gcc --version
e ver se realmente é 5.4.0. Observe também que os dois pacotes cujas facetas foram desbloqueadas foram atualizados, uma possibilidade disponível após o desbloqueio.Você pode perguntar por que não precisamos desbloquear outras facetas. A razão para isso é que o Solaris 11.3 não entregou o GCC 5 e, portanto, não apresentou restrições em suas versões de pacotes. Portanto, todos os
gcc-*-5
pacotes já são irrestritos e não precisam ser desbloqueados para relaxar as restrições.Você pode perceber que o
gcc-gfortran-runtime
egcc-gobjc-runtime
pacotes foram instalados nas versões 4.8. Isso ocorre porque eles ainda estão restritos, mas nada do que fizemos entrou em conflito com essas restrições. Por questões de consistência, você provavelmente também deve desbloqueá-los e atualizá-los para as versões 5.x (ou, se você chegou até aqui antes de tentar qualquer coisa, basta desbloqueá-los desde o início).fonte
pkg change-facet
seguido porpkg install -nv gcc-5 gcc-c-5
. A saída foi limpa, o que significa que não vi erros ou saídas como você detalhou no caminho da rejeição. Posteriormente, o GCC ainda é 4.8.2 egcc-5 --version
resulta emgcc-5: command not found
. Eu ainda parece estar perdendo alguma coisa./usr/gcc
. Nós não enviamos/usr/bin/gcc-<version>
, embora isso possa ser um bug que vale a pena arquivar. Você pode usar/usr/gcc/5/bin/gcc
diretamente, ou você pode dizer ao sistema de embalagem que coisa deve estar em/usr/bin/gcc
:pkg set-mediator -V 5 gcc
.Tente o seguinte:
Você provavelmente verá algo como
O GCC 5.x deve estar em
/usr/gcc/5.x/...
Minha instalação do Solaris 11 possui várias versões do GCC em
/usr/gcc
.Atualização : E nenhuma dessas versões abaixo
/usr/gcc
é uma versão 5.x. Para onde foi?fonte
/usr/gcc/5.x/
instalação posterior. Como você instalou o GCC 5.x?pkg search gcc
mostra? Asbasename
entradas devem mostrar todas as versões dogcc
comando instalado no seu sistema.basename file usr/gcc/5.3/bin/gcc pkg:/developer/gcc/[email protected]
Isso parece indicar que você deve ter um/usr/gcc/5.3/bin/gcc
instalado. A linha 289 também mostra uma5.3.0-5.12.0.0.0.105.1
versão. O quepkg search -l gcc | grep ^basename
mostra? Isso deve mostrar apenas os arquivos nomeadosgcc
que estão realmente instalados.Primeiro, uma listagem de
pkg publisher
seria útil. Assim como umpkg list |grep gcc
E não parece que foi instalado, sua saída mostra apenas (2) pkgs e (8) arquivos sendo instalados.
Pode ser necessário liberar as restrições para poder instalar. Sua saída das dicas de instalação que você está instalando da cadeia de avaliação do FOSS. Sugira que você analise junto com o link fornecido em sua saída:
Como acessar pacotes de avaliação FOSS selecionados para Oracle Solaris 11.3
Além disso: Normalmente, um
pkg search gcc
deve ajudar a encontrar onde algo foi instalado, bem como o pkg? Apkg contents <pkg>
também é útil para encontrar o que compõe um pacote.Eu também esperava que vários pacotes fossem instalados vs apenas 2, pois acredito que o pacote gcc deve tentar instalar vários pacotes para todas as ferramentas do desenvolvedor.
Talvez este seja o pacote que você deseja no repositório de lançamento?
developer/gcc/gcc-c++-5
fonte
sudo pkg install developer/gcc/gcc-c++-5
resulta emReject: pkg://solaris/developer/gcc/[email protected]
comReason: 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>
Você checou o link acima para usar o eval pkgs? Ainda não tentei usar o eval pkgs, mas parece que você precisará desbloquear alguns dos pkgs para instalá-los / atualizá-los.