GCC-5 在 Solaris 11 上安装后在哪里?

GCC-5 在 Solaris 11 上安装后在哪里?

请原谅我的无知...我只使用 Solaris 来测试我感兴趣的 C/C++ 库。我不是 Solaris 管理员或 Solaris 用户。

我在 Solaris 11.3 x86 上安装了 GCC-5,因为我需要一个支持的 C++ 编译器-std=c++11(请参阅下面的包输出)。 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

编译器位于哪里?


根据在 Oracle Solaris 11 上安装 GCC/usr/bin/gcc在 Stack Overflow 上,它应该作为符号链接存在。但答案似乎有点偏差:

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

根据Solaris 11 中缺少 GCC,并且服务器已部署关于服务器故障:

/usr/sfw/bin是 Solaris 10 中捆绑的 gcc 路径。在 Solaris 11.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.

答案1

长话短说:

# 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,因此它们被忽略,最终得到的结果比您预期的要少。

当这种情况发生时(无论是更少的软件包,还是不同版本的软件包),您应该做的第一件事就是告诉pkg您实际期望什么。 (现在,这里的脱节在于如何知道会发生什么;在不知道如何检查gcc-5该信息的情况下,或者甚至知道您可能必须这样做,我不知道如何回答这个问题。)在这种情况下,选择以下之一查看它的依赖项是否有帮助;说,gcc-c-5(您遵循了这一步骤gcc-c++-5,这给您带来了与我在这里展示的相同的问题,但我想将它们放在一个答案中)。这告诉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-runtimegcc-c-runtimegcc-c-5

这就是我们遇到 Solaris FOSS 评估程序的奇怪之处之一的地方。那里提供的软件包没有与系统的其他部分很好地集成;它们被设计为安装在较新版本的 Solaris 上。但它们的构建使得系统至少可以被合理地调整以允许安装它们。在这种情况下,你必须改变几个方面。

Solaris 中的大多数 FOSS 软件包都是以这样的方式合并的,即incorporate可以放松由该依赖项提供的约束。您可以通过将命名为 的方面更改version-lock.<pkg-name>为来做到这一点false。在这种情况下,gcc-c-runtimegcc-c++-runtime是阻止您想要的安装的两个包,因此(如上所述):

# 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。另请注意,我们解锁的两个方面的软件包已升级,解锁后可能可用。

您可能会问为什么我们不需要解锁任何其他方面。原因是 Solaris 11.3 没有提供 GCC 5,因此没有对其软件包版本提供任何限制。所以所有的gcc-*-5包都已经不受约束了,不需要解锁来放松约束。

您可能会注意到gcc-gfortran-runtimegcc-gobjc-runtime软件包已安装在 4.8 版本中。那是因为它们仍然受到限制,但我们所做的一切都没有与这些限制相冲突。为了保持一致性,您可能也应该解锁它们,然后将它们升级到 5.x 版本(或者,如果您在尝试任何操作之前已经完成了这一步,只需从一开始就解锁它们)。

答案2

尝试这个:

ls -l /usr/bin/gcc

你可能会看到类似的东西

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

GCC 5.x 应该在/usr/gcc/5.x/...

我的 Solaris 11 安装有多个版本的 GCC,位于/usr/gcc.

更新:并且下面的这些版本都不/usr/gcc是 5.x 版本。它去哪儿了?

答案3

首先,来自的列表pkg publisher会很有用。以及ASApkg list |grep gcc

而且它似乎没有安装,您的输出仅显示正在安装 (2) 个 pkgs 和 (8) 个文件。

您可能需要释放限制才能安装。安装的输出提示您正在从 FOSS 评估链进行安装。建议您查看输出中提供的链接:

如何访问 Oracle Solaris 11.3 的选定 FOSS 评估包

另外:通常 apkg search gcc应该帮助找到某些东西的安装位置以及 pkg? Apkg contents <pkg>对于查找 pkg 的组成部分也很有用。

我还预计会看到安装多个 pkg,而不是仅安装 2 个,因为我相信 gcc pkg 应该尝试为所有开发人员工具安装多个 pkg。

也许这是您在发布存储库下想要的 pkg? developer/gcc/gcc-c++-5

相关内容