Onde fica o GCC-5 após instalá-lo no Solaris 11?

7

Por favor, perdoe minha ignorância ... Eu só uso o Solaris para testar bibliotecas C / C ++ nas quais tenho interesse. Não sou um administrador do Solaris ou um usuário do Solaris.

Instalei o GCC-5 no Solaris 11.3, x86 porque precisava de um compilador C ++ que suportasse -std=c++11 (veja abaixo a saída do pacote). O GCC nativo da Sun é o 4.8 e não suporta o C ++ 11 bem (ou nada).

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 o compilador está localizado?

De acordo com Instalando o GCC no Oracle Solaris 11 no Stack Overflow, supõe-se que ele esteja em /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 GCC ausente do Solaris 11 e servidor já implantado na falha do servidor:

/usr/sfw/bin is the bundled gcc path with Solaris 10. On Solaris 11.1, gcc is, when installed, directly available in /usr/bin as a symlink that points to /usr/gcc/<version>/bin/gcc

A resposta parece estar um pouco distante 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

Depois de instalar 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.
    
por jww 22.01.2017 / 13:12

3 respostas

8

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, o problema é que gcc-5 é o que é conhecido como um pacote "group". Isto é, consiste (pelo menos primariamente) de um monte de group de dependências. Uma group dependency é aquela que será instalada, se possível, mas ignorada, se não for. Neste caso, não foi possível instalar uma ou mais das dependências de gcc-5 , então 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 você realmente espera. (Agora, a desconexão aqui é como saber o que esperar; sem saber como inspecionar gcc-5 para essa informação, ou mesmo sabendo que talvez seja necessário, não sei como responder a isso.) Nesse caso, escolha uma de suas dependências para ver se isso ajuda; digamos, gcc-c-5 (você seguiu este passo para gcc-c++-5 , o que lhe deu o mesmo problema que mostro aqui, mas eu queria juntar tudo em uma resposta). Isso diz ao pkg para não ignorar sua incapacidade de instalar o gcc-c-5 , mas para reclamar em detalhes sobre o motivo pelo qual ele não pôde ser instalado. Espero que haja algo na saída para nos dar uma pista sobre o que fazer em seguida:

# 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/[email protected]
  Reason:  No version matching 'group' dependency developer/gcc/gcc-c++-5 can be installed
    ----------------------------------------
    Reject:  pkg://solaris/developer/gcc/[email protected]
    Reason:  No version matching 'require' dependency developer/gcc/gcc-c-5 can be installed
      ----------------------------------------
      Reject:  pkg://solaris/developer/gcc/[email protected]
      Reason:  No version matching 'require' dependency system/library/gcc/[email protected],5.11-5.12.0.0.0.115.0 can be installed
        ----------------------------------------
        Reject:  pkg://solaris/system/library/gcc/[email protected]
        Reason:  No version matching 'require' dependency system/library/gcc/[email protected],5.11-5.12.0.0.0.115.0 can be installed
          ----------------------------------------
          Reject:  pkg://solaris/system/library/gcc/[email protected]
          Reason:  This version is excluded by installed incorporation consolidation/userland/[email protected]
          ----------------------------------------
        Reason:  This version is excluded by installed incorporation consolidation/userland/[email protected]
        ----------------------------------------
      ----------------------------------------
    ----------------------------------------
No matching version of developer/gcc/gcc-c-5 can be installed:
  Reject:  pkg://solaris/developer/gcc/[email protected]
  Reason:  [already rejected; see above]

Quando você obtém uma confusão de saída do solucionador como essa, normalmente deseja procurar o problema mais recuado e ver se pode corrigir isso. Nesse caso, você vê que não é possível instalar o [email protected] porque foi 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 fornece principalmente dependências, neste caso, incorporate dependencies. Essas dependências nunca realmente fazem com que pacotes sejam instalados; eles simplesmente colocam restrições nos pacotes que podem ser instalados. Especificamente, incorporar [email protected] significa que, se foo estiver instalado, ele deve estar no intervalo de versão [1.2, 1.3) ; ou seja, um mínimo de 1.2 (inclusive) e um máximo de 1.3 (exclusivo) ou qualquer coisa que corresponda a 1.2.x.y.z.... .

Nesse caso, a incorporação userland-incorporation que já está instalada no sistema colocou uma restrição em gcc-c-runtime que é incompatível com a versão de gcc-c-runtime que a instalação gcc-c-5 exige.

É aí que nos deparamos com uma das esquisitices do programa de avaliação Solaris FOSS. Os pacotes disponibilizados lá não estão bem integrados com o resto do sistema; Eles foram projetados para serem instalados em uma versão mais recente do Solaris. Mas eles foram construídos de tal forma que o sistema pode ser, pelo menos, massageado para permitir que eles sejam instalados. Nesse caso, você precisa alterar algumas facetas.

A maioria dos pacotes FOSS no Solaris são incorporados de tal forma que a restrição fornecida por essa dependência incorporate pode ser relaxada. Você pode fazer isso alterando a faceta nomeada por version-lock.<pkg-name> to false . Nesse caso, gcc-c-runtime e gcc-c++-runtime são os dois pacotes que bloqueiam a instalação desejada, 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 isso, 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 voila, temos vários pacotes instalados, que na verdade contêm coisas. A partir daqui, você deve agora poder digitar gcc --version e ver que é de fato 5.4.0. Note também que os dois pacotes cujas facetas nós desbloqueamos 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 pacote. Portanto, todos os pacotes gcc-*-5 já não são restritos e não precisam ser desbloqueados para relaxar as restrições.

Você pode notar que os pacotes gcc-gfortran-runtime e gcc-gobjc-runtime foram instalados em suas versões 4.8. Isso é porque eles ainda estão constrangidos, mas nada do que fizemos conflitou com essas restrições. Por questões de consistência, você provavelmente deveria desbloqueá-los também, e depois atualizá-los para suas versões 5.x (ou, se você já chegou até aqui antes de tentar qualquer coisa, apenas os desbloqueie desde o início).

Espero que isso ajude. Minhas desculpas por não ter visto essa pergunta antes.

    
por 24.04.2017 / 20:03
1

Tente isto:

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 tem várias versões do GCC em /usr/gcc .

Atualizar : e nenhuma dessas versões em /usr/gcc é uma versão 5.x. Para onde foi?

    
por 22.01.2017 / 13:41
1

Primeiro, uma listagem de pkg publisher seria útil. Bem como um pkg list |grep gcc

E não parece que foi instalado, sua saída mostra apenas (2) pkgs e (8) arquivos sendo instalados.

Você pode precisar 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. Sugiro que você revise junto com o link fornecido na sua saída:

Como acessar pacotes de avaliação FOSS selecionados para o Oracle Solaris 11.3

Além disso: Normalmente, um pkg search gcc deve ajudar a encontrar onde algo foi instalado, assim como o pacote? Um pkg contents <pkg> também é útil para encontrar o que compõe um pacote.

Eu também esperava ver vários pkgs instalados contra apenas 2, já que acredito que o gcc pkg deveria tentar instalar vários pkgs para todas as ferramentas de desenvolvimento.

Talvez este seja o pacote que você deseja no repo de lançamento? developer/gcc/gcc-c++-5

    
por 25.01.2017 / 23:22