Пожалуйста, прости мое невежество ... Я использую 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.
источник
/bin/gcc
и/usr/bin/gcc
GCC 4.8. Я обновил вопрос с выводом команд.which gcc-5
Ответы:
TL; DR:
и попробуй еще раз.
Так что проблема в том
gcc-5
, что называется «групповым» пакетом. То есть он состоит (по крайней мере, в первую очередь) из набораgroup
зависимостей.group
Зависимость является один , который будет установлен , если это возможно, но игнорируется , если нет. В этом случае было невозможно установить одну или несколько зависимостейgcc-5
, поэтому они были проигнорированы, и в результате вы получили меньше, чем ожидали.Когда это происходит (меньше пакетов или пакетов другой версии), первое, что вы должны сделать, это сказать,
pkg
чего вы на самом деле ожидаете. (Теперь, разъединение здесь - как узнать, чего ожидать; не зная, как проверитьgcc-5
эту информацию, или даже не зная, что вам, возможно, придется, я не знаю, как на это ответить.) В этом случае выберите один из следующих вариантов. его зависимости, чтобы видеть, помогает ли это; скажем,gcc-c-5
(вы выполнили этот шаг дляgcc-c++-5
, который дал вам ту же проблему, что я покажу здесь, но я хотел собрать все это вместе в одном ответе). Это говоритpkg
не о том, что нужно игнорировать невозможность установкиgcc-c-5
, а о том, чтобы на самом деле подробно жаловаться на то, почему его нельзя установить. Надеемся, что в выводе будет что-то, что даст нам понять, что делать дальше:Когда вы получаете беспорядок выходного решения, подобного этому, вы обычно хотите найти самую глубокую проблему и посмотреть, сможете ли вы ее исправить. В этом случае вы видите, что он не может быть установлен,
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
два пакета блокируют установку, которую вы хотите, так (как указано выше):Это даст немного результата, но, казалось бы, не очень. Как только это будет сделано, мы можем попробовать еще раз:
И вуаля, мы получили несколько пакетов, которые на самом деле содержат вещи. Отсюда вы теперь сможете печатать
gcc --version
и видеть, что это действительно 5.4.0. Также обратите внимание, что два пакета, грани которых мы разблокировали, были обновлены, возможность доступна после разблокировки.Вы можете спросить, почему нам не нужно разблокировать какие-либо другие аспекты. Причиной этого является то, что Solaris 11.3 не предоставлял GCC 5, и поэтому не предоставлял никаких ограничений для версий своих пакетов. Таким образом, все
gcc-*-5
пакеты уже без ограничений, и их не нужно разблокировать, чтобы ослабить ограничения.Вы можете заметить , что
gcc-gfortran-runtime
иgcc-gobjc-runtime
пакеты получили установлены на своих 4.8 версии. Это потому, что они все еще ограничены, но мы ничего не сделали с этими ограничениями. Для согласованности вам, вероятно, следует также разблокировать их, а затем обновить их до их версий 5.x (или, если вы продвинулись так далеко, прежде чем что-либо пытаться, просто разблокируйте их с самого начала).источник
pkg change-facet
а затемpkg install -nv gcc-5 gcc-c-5
. Вывод был чистым, то есть я не видел ошибок или выводов, как вы подробно описали в пути отклонения. После этого GCC все еще 4.8.2 иgcc-5 --version
приводит кgcc-5: command not found
. Кажется, я все еще что-то упускаю./usr/gcc
. Мы не осуществляем доставку/usr/bin/gcc-<version>
, хотя это может быть серьезной ошибкой в файле. Вы можете использовать/usr/gcc/5/bin/gcc
непосредственно, или вы можете сказать упаковочную систему , которая вещь должна быть на/usr/bin/gcc
:pkg set-mediator -V 5 gcc
.Попробуй это:
Вы, вероятно, увидите что-то вроде
GCC 5.x должен быть в
/usr/gcc/5.x/...
Моя установка Solaris 11 имеет несколько версий GCC
/usr/gcc
.Обновление : И ни одна из этих версий
/usr/gcc
не является версией 5.x. Куда это делось?источник
/usr/gcc/5.x/
после установки. Как вы установили GCC 5.x?pkg search gcc
показывает? Этиbasename
записи должны показать все версииgcc
команды , установленной на вашей системе.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
, которые на самом деле установлены.Во-первых,
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
источник
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 install -nv <pkg>
Вы проверяли ссылку выше для использования eval pkgs? Я еще не попробовал использовать eval pkgs, но, похоже, вам может понадобиться разблокировать некоторые из pkgs для их установки / обновления.