web-dev-qa-db-ja.com

Solaris 11にインストールした後のGCC-5はどこにありますか?

私の無知を許してください...私は興味のある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.
8
user56041

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つの回答にまとめたかったのです)。これは、pkggcc-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-runtimegcc-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バージョンにアップグレードする必要があります(または、何かを試す前にこれまでに取得した場合は、最初からロック解除するだけです)。

10
Danek Duvall

これを試して:

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バージョンではありません。どこに行くの?

1
Andrew Henle

まず、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

1
sleepyweasel