Onde está o GCC-5 depois de instalá-lo no Solaris 11?


9

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/gcccomo 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/bincomo 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/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

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

Tente usar: gcc --version e não gcc-5 --version
Slh47

1
/ Usr / gcc é um softlink?
precisa saber é o seguinte

@ FloHe - Ambos /bin/gcce /usr/bin/gccsão GCC 4.8. Atualizei a pergunta com a saída dos comandos.

você tem certeza de que a instalação foi concluída corretamente?
Rory Alsop

Talvez tente:which gcc-5
FloHe

Respostas:


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 tente novamente.

Portanto, a questão é que gcc-5é conhecido como pacote "grupo". Ou seja, consiste (pelo menos principalmente) em várias groupdependências. Uma groupdependê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 de gcc-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 pkgo que realmente espera. (Agora, a desconexão aqui é como saber o que esperar; sem saber como inspecionar gcc-5essas 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 etapa gcc-c++-5, o que lhe deu o mesmo problema que mostro aqui, mas eu queria reunir tudo em uma resposta). Isso diz pkgpara não ignorar sua incapacidade de instalar gcc-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:

# 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]

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 gcc-c-runtime@5.4.0-5.12.0.0.0.115.0porque 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, incorporatedependê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 foo@1.2significa que, se fooestiver instalado, ele deverá estar no intervalo de versões [1.2, 1.3); isto é, um mínimo de 1.2(inclusive) e um máximo de 1.3(exclusivo) ou qualquer coisa que corresponda 1.2.x.y.z.....

Nesse caso, a incorporação userland-incorporationque já está instalada no sistema impôs uma restrição gcc-c-runtimeincompatível com a versão gcc-c-runtimeexigida pela instalação gcc-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 incorporatedependência possa ser relaxada. Você pode fazer isso alterando a faceta nomeada por version-lock.<pkg-name>para false. Nesse caso, gcc-c-runtimee gcc-c++-runtimeos dois pacotes estão bloqueando a instalação que você deseja, então (como acima):

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

Isso dará um pouco de saída, mas aparentemente não faz muito. Uma vez feito, porém, podemos tentar novamente:

# 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

E pronto, temos um monte de pacotes instalados, que realmente contêm coisas. A partir daqui, você deve ser capaz de digitar gcc --versione 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-*-5pacotes já são irrestritos e não precisam ser desbloqueados para relaxar as restrições.

Você pode perceber que o gcc-gfortran-runtimeegcc-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).


Obrigado @Danek, e desculpe pela resposta tardia. Estou em outro ciclo de teste do Solaris. Eu corri pkg change-facetseguido por pkg 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 e gcc-5 --versionresulta em gcc-5: command not found. Eu ainda parece estar perdendo alguma coisa.

Versões diferentes do gcc estão disponíveis /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/gccdiretamente, ou você pode dizer ao sistema de embalagem que coisa deve estar em /usr/bin/gcc: pkg set-mediator -V 5 gcc.
Danek Duvall

1

Tente o seguinte:

ls -l /usr/bin/gcc

Você provavelmente verá algo como

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

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?


Obrigado Andrew. Não tenho uma /usr/gcc/5.x/instalação posterior. Como você instalou o GCC 5.x?

@ jww Eu tenho um monte de versões 4.x diferentes. No 5, no entanto?!?! Estranho. Eu vou ter que cavar isso.
Andrew Henle 22/01

@jww O que pkg search gccmostra? As basenameentradas devem mostrar todas as versões do gcccomando instalado no seu sistema.
Andrew Henle

@jww Linha 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 Isso parece indicar que você deve ter um /usr/gcc/5.3/bin/gccinstalado. A linha 289 também mostra uma 5.3.0-5.12.0.0.0.105.1versão. O que pkg search -l gcc | grep ^basenamemostra? Isso deve mostrar apenas os arquivos nomeados gccque estão realmente instalados.
Andrew Henle

Adicionado à pergunta (último bloco).

1

Primeiro, uma listagem de pkg publisherseria ú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 gccdeve ajudar a encontrar onde algo foi instalado, bem como o pkg? A pkg 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


Obrigado. sudo pkg install developer/gcc/gcc-c++-5resulta em Reject: pkg://solaris/developer/gcc/gcc-c++-5@5.4.0-5.12.0.0.0.115.0com 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.

Tente uma lista `pkg -a | grep c ++` para procurar uma versão do gcc. E antes da instalação real, tente uma instalação detalhada de execução a seco para ver se isso fornece informações sobre a causa da falha. ie: 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.
precisa saber é
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.