Dov'è GCC-5 dopo averlo installato su Solaris 11?


9

Per favore, perdona la mia ignoranza ... Uso Solaris solo per testare librerie C / C ++ che mi interessano. Non sono un amministratore Solaris o un utente Solaris.

Ho installato GCC-5 su Solaris 11.3, x86 perché avevo bisogno di un compilatore C ++ che supporti -std=c++11(vedi sotto per l'output del pacchetto). Il GCC nativo di Sun è 4.8 e non supporta bene C ++ 11 (o affatto).

Purtroppo non riesco a trovarlo dopo l'installazione:

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

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

E per completezza:

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

Dove si trova il compilatore?


Secondo l' installazione di GCC su Oracle Solaris 11 su Stack Overflow, dovrebbe essere /usr/bin/gccun link simbolico. Ma la risposta sembra essere un po 'spenta:

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

Secondo GCC mancante da Solaris 11 e server già distribuito su Server Fault:

/usr/sfw/binè il percorso gcc in bundle con Solaris 10. Su Solaris 11.1, gcc è, quando installato, direttamente disponibile /usr/bincome link simbolico che punta a/usr/gcc/<version>/bin/gcc

Anche la risposta sembra essere un po 'spenta.


$ 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

Dopo l'installazione 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.

Prova ad usare: gcc --version e non gcc-5 --version
Slh47

1
/ Usr / gcc è un softlink?
FloHe il

@FloHe - Entrambi /bin/gcce /usr/bin/gccsono GCC 4.8. Ho aggiornato la domanda con l'output dei comandi.

sei sicuro che l'installazione sia stata completata correttamente?
Rory Alsop,

Forse prova:which gcc-5
FloHe il

Risposte:


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

Quindi il problema è che gcc-5è ciò che è noto come un pacchetto "gruppo". Cioè, consiste (almeno principalmente) di un mucchio di groupdipendenze. Una groupdipendenza è quella che verrà installata se possibile, ma in caso contrario ignorata. In questo caso, non è stato possibile installare una o più delle dipendenze di gcc-5, quindi sono state ignorate e si è finito con meno del previsto.

Quando ciò accade (che si tratti di meno pacchetti o pacchetti in una versione diversa), la prima cosa che dovresti fare è dire pkgcosa ti aspetti effettivamente. (Ora, la disconnessione qui è come sapere cosa aspettarsi; senza sapere come ispezionare gcc-5tali informazioni, o anche sapendo che potresti doverlo fare, non sono sicuro di come rispondere.) In questo caso, scegli uno dei le sue dipendenze per vedere se aiuta; dì, gcc-c-5(hai seguito questo passaggio per gcc-c++-5, che ti ha dato lo stesso problema che mostro qui, ma volevo mettere tutto insieme in una risposta). Questo dice di pkgnon ignorare la sua incapacità di installazione gcc-c-5, ma di lamentarsi in dettaglio del perché non è stato possibile installarlo. Speriamo che ci sia qualcosa nell'output per darci un indizio su cosa fare dopo:

# 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 si ottiene un pasticcio di output del solutore come questo, in genere si desidera cercare il problema con rientro più profondo e vedere se è possibile correggerlo. In questo caso, vedi che non è possibile installarlo gcc-c-runtime@5.4.0-5.12.0.0.0.115.0perché è escluso da un'incorporazione installata.

Forse è necessaria una digressione: cos'è un'incorporazione? Come un pacchetto di gruppo, è un pacchetto che fornisce principalmente dipendenze, in questo caso incorporatedipendenze. Queste dipendenze non causano mai l'installazione dei pacchetti; semplicemente pongono vincoli sui pacchetti che possono essere installati. In particolare, l'incorporamento foo@1.2significa che, se fooinstallato, deve trovarsi nell'intervallo di versioni [1.2, 1.3); vale a dire un minimo di 1.2(compreso) e un massimo di 1.3(esclusivo), o qualsiasi cosa corrisponda 1.2.x.y.z.....

In questo caso, l'incorporazione userland-incorporationgià installata sul sistema ha posto un vincolo gcc-c-runtimeincompatibile con la versione gcc-c-runtimedell'installazione gcc-c-5richiesta.

È qui che ci imbattiamo in una delle stranezze del programma di valutazione FOSS di Solaris. I pacchetti resi disponibili non sono ben integrati con il resto del sistema; sono progettati per essere installati su una versione più recente di Solaris. Ma sono stati costruiti in modo tale che il sistema possa almeno essere massaggiato in modo sano per consentirne l'installazione. In questo caso, devi cambiare alcune sfaccettature.

La maggior parte dei pacchetti FOSS in Solaris sono incorporati in modo tale che il vincolo fornito da quella incorporatedipendenza possa essere allentato. Puoi farlo cambiando la faccetta chiamata da version-lock.<pkg-name>a false. In questo caso, gcc-c-runtimee gcc-c++-runtimesono i due pacchetti che bloccano l'installazione desiderata, quindi (come sopra):

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

Questo darà un po 'di output, ma apparentemente non farà molto. Al termine, tuttavia, possiamo riprovare:

# 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 voilà, abbiamo installato un sacco di pacchetti, che in realtà contengono materiale. Da qui, dovresti ora essere in grado di digitare gcc --versione vedere che è davvero 5.4.0. Nota anche che i due pacchetti di cui abbiamo sbloccato le sfaccettature sono stati aggiornati, una possibilità disponibile dopo lo sblocco.

Potresti chiederti perché non abbiamo dovuto sbloccare altre sfaccettature. La ragione di ciò è che Solaris 11.3 non ha fornito GCC 5 e quindi non ha comportato alcun vincolo per le sue versioni del pacchetto. Quindi tutti i gcc-*-5pacchetti sono già senza vincoli e non devono essere sbloccati per allentare i vincoli.

Potresti notare che i pacchetti gcc-gfortran-runtimee gcc-gobjc-runtimesono stati installati nelle loro versioni 4.8. Questo perché sono ancora vincolati, ma nulla di ciò che abbiamo fatto è stato in conflitto con tali vincoli. Per coerenza, probabilmente dovresti anche sbloccarli e quindi aggiornarli alle loro versioni 5.x (o, se sei arrivato così lontano prima di provare qualcosa, sbloccali dall'inizio).


Grazie @Danek, e scusa per la risposta tardiva. Sono su un altro ciclo di test di Solaris. Ho corso pkg change-facetseguito da pkg install -nv gcc-5 gcc-c-5. L'output era pulito, il che significa che non ho visto errori o output come te dettagliati sul percorso di rifiuto. Successivamente GCC è ancora 4.8.2 e gcc-5 --versionrisulta in gcc-5: command not found. Mi sembra ancora che manchi qualcosa.

Sono presenti diverse versioni di gcc /usr/gcc. Non spediamo /usr/bin/gcc-<version>, anche se potrebbe essere un bug utile da archiviare. È possibile utilizzare /usr/gcc/5/bin/gccdirettamente, o si può dire al sistema di confezionamento, che cosa dovrebbe essere /usr/bin/gcc: pkg set-mediator -V 5 gcc.
Danek Duvall,

1

Prova questo:

ls -l /usr/bin/gcc

Probabilmente vedrai qualcosa di simile

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

GCC 5.x dovrebbe essere in /usr/gcc/5.x/...

La mia installazione di Solaris 11 ha più versioni di GCC sotto /usr/gcc.

Aggiornamento : e nessuna di quelle versioni sotto /usr/gccè una versione 5.x. Dove è andato?


Grazie Andrew. Non ho un /usr/gcc/5.x/dopo l'installazione. Come hai installato GCC 5.x?

@jww Ho un sacco di diverse versioni 4.x. No 5, però?!?! Strano. Dovrò scavare in questo.
Andrew Henle,

@jww Cosa pkg search gccmostra? Le basenamevoci dovrebbero mostrare tutte le versioni del gcccomando installato sul tuo sistema.
Andrew Henle,

@jww Line 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 ciò sembra indicare che dovresti avere /usr/gcc/5.3/bin/gccinstallato. La riga 289 mostra anche una 5.3.0-5.12.0.0.0.105.1versione. Cosa pkg search -l gcc | grep ^basenamemostra? Ciò dovrebbe mostrare solo i file denominati gccche sono effettivamente installati.
Andrew Henle,

Aggiunto alla domanda (ultimo blocco).

1

Innanzitutto, pkg publishersarebbe utile un elenco di . Così come apkg list |grep gcc

E non sembra che sia stato installato, l'output mostra solo (2) pkgs e (8) file in fase di installazione.

Potrebbe essere necessario rilasciare i vincoli per poter installare. L'output dei suggerimenti di installazione che stai installando dalla catena di valutazione FOSS. Suggerisci di rivedere insieme al link fornito nel tuo output:

Come accedere ai pacchetti di valutazione FOSS selezionati per Oracle Solaris 11.3

Inoltre: normalmente pkg search gccdovrebbe aiutare a trovare dove è stato installato qualcosa, così come il pkg? A pkg contents <pkg>è anche utile per trovare ciò che costituisce un pkg.

Mi sarei anche aspettato di vedere più pkgs installati solo su 2 poiché credo che gcc pkg dovrebbe provare a installare più pkg per tutti gli strumenti di sviluppo.

Forse questo è il pacchetto desiderato nel repository di rilascio? developer/gcc/gcc-c++-5


Grazie. sudo pkg install developer/gcc/gcc-c++-5risulta in 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.

Prova una `pkg list -a | grep c ++` per cercare una versione di gcc. E prima dell'installazione effettiva, prova un'installazione dettagliata a secco per vedere se ciò ti dà informazioni sulla causa dell'errore. vale a dire: pkg install -nv <pkg> hai controllato il link qui sopra per l'utilizzo dei pacchetti eval? Devo ancora provare a utilizzare i pkg eval, ma sembra che potresti aver bisogno di sbloccare alcuni dei pkg per installarli / aggiornarli.
Sleepyweasel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.