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

Пожалуйста, простите мое невежество … Я использую только 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 в Stack Overflow, она должна быть в /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. 

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 зависимостей. 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] 

Когда вы получаете беспорядок выходного сигнала solver, как это, вы, как правило, хотите найти самую глубокую с отступом проблему и посмотреть, можете ли вы ее исправить. В этом случае вы видите, что он не может установить 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.xyz...

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

Надеюсь это поможет. Приношу свои извинения за то, что раньше не видел этого вопроса.

Попробуй это:

 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. Куда он пошел?

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

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

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

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

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

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

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