Где находится GCC-5 после его установки на Solaris 11?

9

Пожалуйста, прости мое невежество ... Я использую Solaris только для тестирования библиотек C / C ++, которые меня интересуют. Я не являюсь администратором Solaris или пользователем Solaris.

Я установил GCC-5 на Solaris 11.3, x86, потому что мне был нужен компилятор C ++, который поддерживает -std=c++11(см. Ниже для вывода пакета). Родной GCC Sun - 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

Где находится компилятор?


В соответствии с установкой GCC в Oracle Solaris 11 при переполнении стека, он должен быть /usr/bin/gccсимволической ссылкой. Но ответ, кажется, немного не так

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

Согласно GCC отсутствует в Solaris 11, а сервер уже развернут на отказе сервера:

/usr/sfw/binэто связанный путь gcc с Solaris 10. В 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/gccGCC 4.8. Я обновил вопрос с выводом команд.
Вы уверены, что установка завершена правильно?
Рори Олсоп
Может быть, попробуйте:which gcc-5
FloHe

Ответы:

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. Но они были построены так, что систему можно по крайней мере разумно поменять, чтобы позволить им быть установленными. В этом случае вам нужно изменить несколько аспектов.

Большинство пакетов FOSS в Solaris включены таким образом, что ограничение, предоставляемое этой incorporateзависимостью, может быть ослаблено. Вы можете сделать это, изменив фасет с именем version-lock.<pkg-name>на false. В этом случае gcc-c-runtimeи gcc-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-runtimeи gcc-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/gcc: pkg set-mediator -V 5 gcc.
Данек Дюваль
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 Line 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

Во-первых, pkg publisherбыло бы полезно получить список от . Также как иpkg list |grep gcc

И не похоже, что он был установлен, ваш вывод показывает только (2) pkgs и (8) устанавливаемые файлы.

Возможно, вам придется снять ограничения, чтобы иметь возможность установить. Ваш вывод из установки указывает на то, что вы устанавливаете из цепочки FOSS eval. Предлагаем вам обзор вместе со ссылкой, приведенной в вашем выводе:

Как получить доступ к выбранным оценочным пакетам FOSS для Oracle Solaris 11.3

Кроме того: Обычно a pkg search gccдолжен помочь найти, где что-то было установлено, а также pkg? А pkg contents <pkg>также полезно для поиска того, что составляет ПКГ.

Я также ожидал увидеть, что будет установлено несколько pkgs, а не только 2, так как я считаю, что gcc pkg должен попытаться установить несколько pkgs для всех инструментов разработчика.

Возможно, это тот pkg, который вы хотите использовать в репозитории релизов? developer/gcc/gcc-c++-5

sleepyweasel
источник
Спасибо. 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.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.
Попробуйте `pkg list -a | grep c ++`, чтобы найти версию gcc. И до фактической установки попробуйте подробную пробную установку, чтобы узнать, дает ли она какую-либо информацию о причине сбоя. т.е. pkg install -nv <pkg> Вы проверяли ссылку выше для использования eval pkgs? Я еще не попробовал использовать eval pkgs, но, похоже, вам может понадобиться разблокировать некоторые из pkgs для их установки / обновления.
Sleyweasel