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/gcc
einen 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/bin
ist der mit Solaris 10 gebündelte gcc-Pfad. Unter Solaris 11.1 ist gcc bei der Installation direkt/usr/bin
als 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/[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
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/[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.
quelle
/bin/gcc
und/usr/bin/gcc
sind GCC 4.8. Ich habe die Frage mit der Ausgabe der Befehle aktualisiert.which gcc-5
Antworten:
TL; DR:
und versuche es erneut.
Das Problem ist also, dass
gcc-5
es sich um ein sogenanntes "Gruppen" -Paket handelt. Das heißt, es besteht (zumindest hauptsächlich) aus einer Reihe vongroup
Abhängigkeiten. Einegroup
Abhä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 installierengcc-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,
pkg
was Sie tatsächlich erwarten. (Die Unterbrechung hier besteht darin, zu wissen, was zu erwarten ist. Ohne zu wissen, wiegcc-5
diese 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 befolgtgcc-c++-5
, der Ihnen das gleiche Problem gab, das ich hier zeige, aber ich wollte alles in einer Antwort zusammenfassen). Dies bedeutetpkg
, die Unfähigkeit zur Installation nicht zu ignorierengcc-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: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,
[email protected]
da 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
incorporate
Abhä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[email protected]
bedeutet insbesondere, dass es, wennfoo
es installiert ist, im Versionsbereich liegen muss[1.2, 1.3)
. das heißt, ein Minimum von1.2
(einschließlich) und ein Maximum von1.3
(exklusiv) oder alles, was passt1.2.x.y.z....
.In diesem Fall hat die
userland-incorporation
bereits auf dem System installierte Integration eine Einschränkung auferlegtgcc-c-runtime
, die nicht mit der Versiongcc-c-runtime
dieser Installation kompatibel istgcc-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
incorporate
Abhängigkeit bereitgestellte Einschränkung gelockert werden kann. Sie können dies tun, indem Sie die vonversion-lock.<pkg-name>
bis benannte Facette ändernfalse
. In diesem Fallgcc-c-runtime
undgcc-c++-runtime
sind die beiden Sperr Pakete die Installation Sie wollen, so (wie oben):Dies wird ein wenig Ausgabe geben, aber scheinbar nicht viel bewirken. Sobald dies erledigt ist, können wir es erneut versuchen:
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 --version
und 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-*-5
Pakete 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-runtime
undgcc-gobjc-runtime
in 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).quelle
pkg change-facet
gefolgt vonpkg 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 undgcc-5 --version
führt zugcc-5: command not found
. Mir scheint immer noch etwas zu fehlen./usr/gcc
. Wir versenden nicht/usr/bin/gcc-<version>
, obwohl dies ein lohnender Fehler sein könnte. Sie können/usr/gcc/5/bin/gcc
direkt verwenden oder dem Verpackungssystem mitteilen, an welcher Stelle sich Folgendes befinden soll/usr/bin/gcc
:pkg set-mediator -V 5 gcc
.Versuche dies:
Sie werden wahrscheinlich so etwas sehen
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/gcc
ist eine 5.x-Version. Wo ist es hingegangen?quelle
/usr/gcc/5.x/
nach der Installation. Wie haben Sie GCC 5.x installiert?pkg search gcc
zeigt? Diebasename
Einträge sollten allegcc
auf Ihrem System installierten Versionen des Befehls anzeigen.basename file usr/gcc/5.3/bin/gcc pkg:/developer/gcc/[email protected]
Das scheint darauf hinzudeuten, dass Sie eine/usr/gcc/5.3/bin/gcc
installiert haben sollten . Zeile 289 zeigt auch eine5.3.0-5.12.0.0.0.105.1
Version. Waspkg search -l gcc | grep ^basename
zeigt? Das sollte nur die Dateien anzeigengcc
, die tatsächlich installiert sind.Erstens
pkg publisher
wä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 gcc
sollte ein helfen, herauszufinden, wo etwas installiert wurde, sowie das Paket? Apkg 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
quelle
sudo pkg install developer/gcc/gcc-c++-5
führt zuReject: pkg://solaris/developer/gcc/[email protected]
mitReason: 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>
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.