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


9

请原谅我的无知...我仅将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

编译器在哪里?


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

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

根据Solaris 11中缺少的GCC,并且服务器已在Server Fault上进行了部署

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

安装后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/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.

尝试使用:gcc --version而不是gcc-5 --version
Slh47

1
/ usr / gcc是软链接吗?
FloHe

@FloHe- /bin/gcc/usr/bin/gcc均为GCC 4.8。我用命令的输出更新了问题。

您确定安装正确完成了吗?
罗里·阿尔索普

也许尝试:which gcc-5
FloHe

Answers:


10

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,因此它们将被忽略,最终结果少于预期。

发生这种情况时(无论是更少的软件包,还是版本不同的软件包),您应该做的第一件事就是告诉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/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]

当您得到一堆这样的求解器输出时,通常需要查找最深的问题,看看是否可以纠正。在这种情况下,您会看到它无法安装,gcc-c-runtime@5.4.0-5.12.0.0.0.115.0因为已被安装的公司排除在外。

也许离题是必要的:什么是公司?像组包一样,它是主要提供依赖关系(在这种情况下为依赖关系)的包incorporate。这些依赖性从不真正导致安装软件包。他们只是对可以安装的软件包施加了约束。具体来说,合并foo@1.2意味着如果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是阻止您所需安装的两个软件包,因此(如上所述):

# 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版本(或者,如果您在尝试任何操作之前已经掌握了这一点,那么请从一开始就对其进行解锁)。


感谢@Danek,对不起您的回复。我正在进行另一个Solaris测试周期。我pkg change-facet跟着跑了pkg install -nv gcc-5 gcc-c-5。输出是干净的,这意味着我没有看到错误或输出像您在拒绝路径中详细说明的那样。之后,GCC仍为4.8.2,gcc-5 --version结果为gcc-5: command not found。我似乎仍然缺少某些东西。

中有不同版本的gcc /usr/gcc。我们不发货/usr/bin/gcc-<version>,尽管这可能是值得提交的错误。您可以使用/usr/gcc/5/bin/gcc直接,或者你可以知道哪些东西应该是在包装系统/usr/bin/gccpkg set-mediator -V 5 gcc
Danek Duvall

1

尝试这个:

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版本。去哪了


谢谢安德鲁。/usr/gcc/5.x/安装后我没有安装。您如何安装GCC 5.x?

@jww我有一堆不同的4.x版本。没有5,但是?!?!奇怪。我将不得不对此进行深入研究。
安德鲁·亨利

@jww pkg search gcc显示什么?这些basename条目应显示gcc系统上安装的命令的所有版本。
安德鲁·亨利

@jww 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 这似乎表明您应该已/usr/gcc/5.3/bin/gcc安装。第289行还显示了一个5.3.0-5.12.0.0.0.105.1版本。是什么pkg search -l gcc | grep ^basename节目?那应该只显示gcc实际安装的命名文件。
安德鲁·亨利

添加到问题(最后一个块)。

1

首先,清单from pkg publisher会很有用。以及ASApkg list |grep gcc

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

您可能需要释放约束才能安装。安装的输出表明您正在从FOSS评估链进行安装。建议您回顾一下输出中提供的链接:

如何访问针对Oracle Solaris 11.3的选定FOSS评估软件包

另外:通常,a pkg search gcc应该可以帮助找到安装位置以及pkg?A pkg contents <pkg>也可用于查找构成pkg的内容。

我还希望看到要安装多个pkg,而只能安装两个pkg,因为我相信gcc pkg应该尝试为所有开发人员工具安装多个pkg。

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


谢谢。sudo pkg install developer/gcc/gcc-c++-5结果Reject: pkg://solaris/developer/gcc/gcc-c++-5@5.4.0-5.12.0.0.0.115.0Reason: 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

尝试`pkg list -a | grep c ++`查找gcc的版本。在实际安装之前,请尝试进行详细的空运行安装,以查看是否能提供有关故障原因的任何信息。即:pkg install -nv <pkg> 您是否检查了上面的链接以使用eval pkg?我尚未尝试使用eval pkgs,但看来您可能需要解锁一些pkgs才能安装/更新它们。
sleepyweasel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.