Wo befindet sich GCC-5 nach der Installation unter Solaris 11?


9

Bitte verzeihen Sie meine Unwissenheit ... Ich verwende Solaris nur zum Testen von C / C ++ - Bibliotheken, an denen ich interessiert bin. Ich bin kein Solaris-Administrator oder Solaris-Benutzer.

Ich habe GCC-5 unter Solaris 11.3, x86 installiert, weil ich einen C ++ - Compiler benötigte, der dies unterstützt -std=c++11(siehe unten für die Paketausgabe). Das native GCC von Sun ist 4.8 und unterstützt C ++ 11 nicht gut (oder überhaupt nicht).

Leider kann ich es nach der Installation nicht finden:

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

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

Und der Vollständigkeit halber:

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

Wo befindet sich der Compiler?


Laut der Installation von GCC unter Oracle Solaris 11 unter Stack Overflow soll es sich um /usr/bin/gcceinen Symlink handeln. Aber die Antwort scheint ein bisschen falsch zu sein:

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

Laut GCC fehlt in Solaris 11 und der Server wurde bereits auf Server Fault bereitgestellt :

/usr/sfw/binist der mit Solaris 10 gebündelte gcc-Pfad. Unter Solaris 11.1 ist gcc bei der Installation direkt /usr/binals Symlink verfügbar, auf den verwiesen wird/usr/gcc/<version>/bin/gcc

Die Antwort scheint auch ein bisschen falsch zu sein.


$ 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

Nach der Installation 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

Und:

~$ 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.

Versuchen Sie zu verwenden: gcc --version und nicht gcc-5 --version
Slh47

1
Ist / usr / gcc ein Softlink?
FloHe

@FloHe - Beide /bin/gccund /usr/bin/gccsind GCC 4.8. Ich habe die Frage mit der Ausgabe der Befehle aktualisiert.

Sind Sie sicher, dass die Installation korrekt abgeschlossen wurde?
Rory Alsop

Vielleicht versuchen Sie:which gcc-5
FloHe

Antworten:


10

TL; DR:

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

und versuche es erneut.

Das Problem ist also, dass gcc-5es sich um ein sogenanntes "Gruppen" -Paket handelt. Das heißt, es besteht (zumindest hauptsächlich) aus einer Reihe von groupAbhängigkeiten. Eine groupAbhängigkeit wird nach Möglichkeit installiert, andernfalls jedoch ignoriert. In diesem Fall war es nicht möglich, eine oder mehrere der Abhängigkeiten von zu installieren gcc-5, sodass sie ignoriert wurden und Sie weniger als erwartet hatten.

Wenn dies passiert (ob es sich um weniger Pakete oder Pakete mit einer anderen Version handelt), sollten Sie zunächst mitteilen, pkgwas Sie tatsächlich erwarten. (Die Unterbrechung hier besteht darin, zu wissen, was zu erwarten ist. Ohne zu wissen, wie gcc-5diese Informationen überprüft werden sollen oder ob Sie dies möglicherweise müssen, bin ich mir nicht sicher, wie ich darauf antworten soll.) Wählen Sie in diesem Fall eine der folgenden Optionen seine Abhängigkeiten, um zu sehen, ob es hilft; sagen Sie, gcc-c-5(Sie haben diesen Schritt befolgt gcc-c++-5, der Ihnen das gleiche Problem gab, das ich hier zeige, aber ich wollte alles in einer Antwort zusammenfassen). Dies bedeutet pkg, die Unfähigkeit zur Installation nicht zu ignorieren gcc-c-5, sondern sich im Detail darüber zu beschweren, warum die Installation nicht möglich war. Hoffentlich gibt es etwas in der Ausgabe, das uns einen Hinweis darauf gibt, was als nächstes zu tun ist:

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

Wenn Sie ein Durcheinander von Solver-Ausgaben wie diesen erhalten, möchten Sie normalerweise nach dem Problem mit dem tiefsten Einzug suchen und prüfen, ob Sie dies beheben können. In diesem Fall sehen Sie, dass die Installation nicht möglich ist, gcc-c-runtime@5.4.0-5.12.0.0.0.115.0da sie durch eine installierte Integration ausgeschlossen ist.

Vielleicht ist ein Exkurs notwendig: Was ist eine Eingliederung? Wie ein Gruppenpaket ist es ein Paket, das hauptsächlich Abhängigkeiten liefert, in diesem Fall incorporateAbhängigkeiten. Diese Abhängigkeiten führen niemals dazu, dass Pakete installiert werden. Sie legen einfach Einschränkungen für Pakete fest, die installiert werden können. Das Einbeziehen foo@1.2bedeutet insbesondere, dass es, wenn fooes installiert ist, im Versionsbereich liegen muss [1.2, 1.3). das heißt, ein Minimum von 1.2(einschließlich) und ein Maximum von 1.3(exklusiv) oder alles, was passt 1.2.x.y.z.....

In diesem Fall hat die userland-incorporationbereits auf dem System installierte Integration eine Einschränkung auferlegt gcc-c-runtime, die nicht mit der Version gcc-c-runtimedieser Installation kompatibel ist gcc-c-5.

Hier stoßen wir auf eine der Kuriositäten des Solaris FOSS-Evaluierungsprogramms. Die dort zur Verfügung gestellten Pakete sind nicht gut in den Rest des Systems integriert. Sie können auf einer neueren Version von Solaris installiert werden. Aber sie wurden so gebaut, dass das System zumindest vernünftig massiert werden kann, damit sie installiert werden können. In diesem Fall müssen Sie einige Facetten ändern.

Die meisten FOSS-Pakete in Solaris sind so integriert, dass die durch diese incorporateAbhängigkeit bereitgestellte Einschränkung gelockert werden kann. Sie können dies tun, indem Sie die von version-lock.<pkg-name>bis benannte Facette ändern false. In diesem Fall gcc-c-runtimeund gcc-c++-runtimesind die beiden Sperr Pakete die Installation Sie wollen, so (wie oben):

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

Dies wird ein wenig Ausgabe geben, aber scheinbar nicht viel bewirken. Sobald dies erledigt ist, können wir es erneut versuchen:

# 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

Und voila, wir bekommen eine Reihe von Paketen installiert, die tatsächlich Sachen enthalten. Von hier aus sollten Sie nun in der Lage sein zu tippen gcc --versionund zu sehen, dass es sich tatsächlich um 5.4.0 handelt. Beachten Sie auch, dass die beiden Pakete, deren Facetten wir entsperrt haben, aktualisiert wurden, eine Möglichkeit, die nach dem Entsperren verfügbar ist.

Sie könnten sich fragen, warum wir keine anderen Facetten freischalten mussten. Der Grund dafür ist, dass Solaris 11.3 kein GCC 5 lieferte und daher keine Einschränkungen für seine Paketversionen lieferte. Daher sind alle gcc-*-5Pakete bereits nicht eingeschränkt und müssen nicht entsperrt werden, um Einschränkungen zu lockern.

Möglicherweise stellen Sie fest, dass die Pakete gcc-gfortran-runtimeund gcc-gobjc-runtimein der Version 4.8 installiert wurden. Das liegt daran, dass sie immer noch eingeschränkt sind, aber nichts, was wir getan haben, widersprach diesen Einschränkungen. Aus Gründen der Konsistenz sollten Sie sie wahrscheinlich auch entsperren und dann auf ihre 5.x-Versionen aktualisieren (oder, wenn Sie so weit gekommen sind, bevor Sie etwas ausprobieren, sie einfach von Anfang an entsperren).


Danke @Danek und entschuldige die späte Antwort. Ich bin in einem anderen Solaris-Testzyklus. Ich rannte pkg change-facetgefolgt von pkg install -nv gcc-5 gcc-c-5. Die Ausgabe war sauber, was bedeutet, dass ich keine Fehler oder Ausgaben gesehen habe, wie Sie sie im Ablehnungspfad angegeben haben. Danach ist GCC noch 4.8.2 und gcc-5 --versionführt zu gcc-5: command not found. Mir scheint immer noch etwas zu fehlen.

Verschiedene Versionen von gcc sind in /usr/gcc. Wir versenden nicht /usr/bin/gcc-<version>, obwohl dies ein lohnender Fehler sein könnte. Sie können /usr/gcc/5/bin/gccdirekt verwenden oder dem Verpackungssystem mitteilen, an welcher Stelle sich Folgendes befinden soll /usr/bin/gcc: pkg set-mediator -V 5 gcc.
Danek Duvall

1

Versuche dies:

ls -l /usr/bin/gcc

Sie werden wahrscheinlich so etwas sehen

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

GCC 5.x sollte in sein /usr/gcc/5.x/...

Meine Solaris 11-Installation enthält mehrere Versionen von GCC unter /usr/gcc.

Update : Und keine dieser Versionen unter /usr/gccist eine 5.x-Version. Wo ist es hingegangen?


Danke Andrew. Ich habe nicht eine /usr/gcc/5.x/nach der Installation. Wie haben Sie GCC 5.x installiert?

@jww Ich habe eine Reihe von verschiedenen 4.x-Versionen. Nr. 5?!?! Seltsam. Ich werde mich damit befassen müssen.
Andrew Henle

@jww Was pkg search gcczeigt? Die basenameEinträge sollten alle gccauf Ihrem System installierten Versionen des Befehls anzeigen.
Andrew Henle

@jww Zeile 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 Das scheint darauf hinzudeuten, dass Sie eine /usr/gcc/5.3/bin/gccinstalliert haben sollten . Zeile 289 zeigt auch eine 5.3.0-5.12.0.0.0.105.1Version. Was pkg search -l gcc | grep ^basenamezeigt? Das sollte nur die Dateien anzeigen gcc, die tatsächlich installiert sind.
Andrew Henle

Zur Frage hinzugefügt (letzter Block).

1

Erstens pkg publisherwäre eine Auflistung von nützlich. Sowie einpkg list |grep gcc

Und es scheint nicht, dass es installiert wurde, Ihre Ausgabe zeigt nur (2) pkgs und (8) Dateien, die installiert werden.

Möglicherweise müssen Sie die Einschränkungen freigeben, um installieren zu können. Ihre Ausgabe aus der Installation weist darauf hin, dass Sie aus der FOSS-Bewertungskette installieren. Schlagen Sie vor, dass Sie zusammen mit dem in Ihrer Ausgabe angegebenen Link eine Bewertung abgeben:

Zugriff auf ausgewählte FOSS-Evaluierungspakete für Oracle Solaris 11.3

Außerdem: Normalerweise pkg search gccsollte ein helfen, herauszufinden, wo etwas installiert wurde, sowie das Paket? A pkg contents <pkg>ist auch nützlich, um herauszufinden, was ein Paket ausmacht.

Ich hätte auch erwartet, dass mehrere pkgs gegen nur 2 installiert werden, da ich glaube, dass das gcc-pkg versuchen sollte, mehrere pkgs für alle Entwicklertools zu installieren.

Vielleicht ist dies das Paket, das Sie unter dem Release-Repo haben möchten? developer/gcc/gcc-c++-5


Vielen Dank. sudo pkg install developer/gcc/gcc-c++-5führt zu Reject: pkg://solaris/developer/gcc/gcc-c++-5@5.4.0-5.12.0.0.0.115.0mit 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.

Versuchen Sie eine `pkg list -a | grep c ++`, um nach einer Version von gcc zu suchen. Versuchen Sie vor der eigentlichen Installation eine ausführliche Trockenlaufinstallation, um festzustellen, ob Sie Informationen zur Fehlerursache erhalten. dh: pkg install -nv <pkg> Hast du den obigen Link auf die Verwendung der eval pkgs überprüft? Ich habe noch nicht versucht, die eval-Pakete zu verwenden, aber es scheint, dass Sie möglicherweise einige der Pakete entsperren müssen, um sie zu installieren / aktualisieren.
Sleepyweasel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.