私の無知を許してください...私は興味のあるC/C++ライブラリのテストにのみSolarisを使用しています。私はSolaris管理者でもSolarisユーザーでもありません。
-std=c++11
をサポートするC++コンパイラが必要だったため、GCC-5をSolaris 11.3、x86にインストールしました(パッケージ出力については以下を参照)。 SunのネイティブGCCは4.8であり、C++ 11を(またはまったく)サポートしていません。
残念ながら、インストール後は見つかりません。
$ g++-5 --version
-bash: g++-5: command not found
$ Sudo find /usr -name gcc-5
$ Sudo find /bin -name gcc-5
$
そして完全性のために:
$ /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
コンパイラはどこにありますか?
Stack Overflow上の Installing GCC on Oracle Solaris 11 によると、それはシンボリックリンクとして/usr/bin/gcc
にあるはずです。しかし、答えは少しずれているようです:
$ /usr/bin/gcc --version
gcc (GCC) 4.8.2
...
Solaris 11にGCCがなく、サーバー障害でサーバーがすでにデプロイされている とのことです。
/usr/sfw/bin
は、Solaris 10にバンドルされているgccパスです。Solaris11.1では、gccをインストールすると、/usr/bin
で/usr/gcc/<version>/bin/gcc
を指すシンボリックリンクとして直接使用できます。
答えも少しずれているようです。
$ 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
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
そして:
~$ 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.
TL; DR:
# pkg change-facet \
version-lock.system/library/gcc/gcc-c-runtime=false \
version-lock.system/library/gcc/gcc-c++-runtime=false
そしてさらに試みる。
したがって、問題は、gcc-5
が「グループ」パッケージと呼ばれるものであるということです。つまり、これは(少なくとも主に)一連のgroup
依存関係で構成されます。 group
依存関係は、可能であればインストールされますが、そうでない場合は無視されます。この場合、gcc-5
の1つ以上の依存関係をインストールすることができなかったため、それらは無視され、予期したよりも少なくなりました。
その場合(パッケージの数が少ないか、別のバージョンのパッケージであるかに関係なく)、最初にすべきことは、pkg
に実際に期待することを伝えることです。 (現在、ここでの切断は、何を期待するかを知る方法です。その情報についてgcc-5
を検査する方法がわからない場合、または必要になる可能性があることさえわからない場合、私はそれに答える方法がわかりません。)依存関係の1つを選択して、それが役立つかどうかを確認します。 gcc-c-5
と言います(gcc-c++-5
でこの手順を実行したため、ここで示したのと同じ問題が発生しましたが、すべてを1つの回答にまとめたかったのです)。これは、pkg
がgcc-c-5
をインストールできないことを無視するのではなく、実際にインストールできなかった理由について詳細に文句を言うように指示します。うまくいけば、出力に何かがあり、次に何をすべきかについての手がかりを与えるでしょう:
# 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]
このようなソルバー出力の混乱が発生した場合、通常は最もインデントされた問題を探し、それを修正できるかどうかを確認します。この場合、[email protected]
はインストールされた法人によって除外されているため、インストールできません。
余談ですが、法人化とは何でしょうか?グループパッケージと同様に、これは主に依存関係(この場合はincorporate
依存関係)を提供するパッケージです。これらの依存関係によって、パッケージが実際にインストールされることはありません。インストールされる可能性のあるパッケージに制約を課すだけです。具体的には、[email protected]
を組み込むことは、foo
がインストールされている場合、バージョン範囲[1.2, 1.3)
内にある必要があることを意味します。つまり、最小で1.2
(包括的)、最大で1.3
(排他的)、または1.2.x.y.z....
に一致するすべてのものです。
この場合、システムにすでにインストールされているuserland-incorporation
は、gcc-c-runtime
のインストールに必要なgcc-c-runtime
のバージョンと互換性がないgcc-c-5
に制約を課しています。
ここで、Solaris FOSS評価プログラムの奇妙なことに遭遇します。そこで利用可能なパッケージは、システムの他の部分とうまく統合されていません。これらは、新しいバージョンのSolarisにインストールするように設計されています。しかし、それらは、システムを少なくとも正気にマッサージしてインストールできるように構築されています。この場合、いくつかのファセットを変更する必要があります。
SolarisのFOSSパッケージのほとんどは、そのincorporate
依存関係によって提供される制約を緩和できるように組み込まれています。そのためには、version-lock.<pkg-name>
という名前のファセットをfalse
に変更します。この場合、gcc-c-runtime
とgcc-c++-runtime
は、必要なインストールをブロックする2つのパッケージなので、(上記のとおり):
# pkg change-facet \
version-lock.system/library/gcc/gcc-c-runtime=false \
version-lock.system/library/gcc/gcc-c++-runtime=false
これは少し出力を提供しますが、一見するとあまり機能しません。それが終わったら、もう一度試すことができます。
# 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
ほら、パッケージがたくさんインストールされています。パッケージには実際に含まれています。ここから、gcc --version
と入力して、実際に5.4.0であることがわかります。ロック解除したファセットを持つ2つのパッケージがアップグレードされたことにも注意してください。ロック解除後に使用できる可能性があります。
他のファセットのロックを解除する必要がなかった理由を尋ねるかもしれません。その理由は、Solaris 11.3はGCC 5を提供しなかったため、パッケージバージョンに制約を提供しなかったためです。したがって、すべてのgcc-*-5
パッケージはすでに制約が解除されており、制約を緩和するためにロックを解除する必要はありません。
gcc-gfortran-runtime
およびgcc-gobjc-runtime
パッケージが4.8バージョンでインストールされていることに気付くでしょう。それはそれらがまだ制約されているからです、しかし私たちがそれらの制約と矛盾したことは何もありません。一貫性を保つために、おそらくそれらもロック解除してから、5.xバージョンにアップグレードする必要があります(または、何かを試す前にこれまでに取得した場合は、最初からロック解除するだけです)。
これを試して:
ls -l /usr/bin/gcc
あなたはおそらく次のようなものを見るでしょう
... /usr/bin/gcc -> ../gcc/4.8/bin/gcc
GCC 5.xは/usr/gcc/5.x/...
にある必要があります
Solaris 11のインストールでは、/usr/gcc
の下に複数のバージョンのGCCがあります。
pdate:そして、/usr/gcc
の下のバージョンは5.xバージョンではありません。どこに行くの?
まず、pkg publisher
のリストが役に立ちます。同様にpkg list |grep gcc
そして、それはインストールされたようには見えません、あなたの出力はインストールされている(2)pkgsと(8)ファイルだけを示しています。
インストールできるようにするには、制約を解除する必要がある場合があります。インストールからの出力は、FOSS evalチェーンからインストールしていることを示唆しています。出力で提供されるリンクと一緒に確認することを提案します。
Oracle Solaris 11.3の選択したFOSS評価パッケージにアクセスする方法
また、通常、pkg search gcc
は、pkgだけでなく、何かがインストールされている場所を見つけるのに役立ちますか? pkg contents <pkg>
は、pkgを構成するものを見つけるのにも役立ちます。
また、gcc pkgがすべての開発者ツール用に複数のpkgをインストールしようとするので、2つだけではなく複数のpkgがインストールされることも期待していました。
おそらく、これはリリースリポジトリで必要なpkgですか? developer/gcc/gcc-c++-5