제 무지를 용서해주세요... 저는 관심 있는 C/C++ 라이브러리를 테스트하기 위해서만 Solaris를 사용합니다. 저는 Solaris 관리자나 Solaris 사용자가 아닙니다.
지원되는 C++ 컴파일러가 필요했기 때문에 Solaris 11.3 x86에 GCC-5를 설치했습니다 -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
스택 오버플로에서는 심볼릭 링크로 존재해야 합니다. 그러나 대답은 약간 벗어난 것 같습니다.
$ /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-runtime
gcc-c-runtime
gcc-c-5
여기서 우리는 Solaris FOSS 평가 프로그램의 이상한 점 중 하나를 발견하게 됩니다. 제공된 패키지는 시스템의 나머지 부분과 잘 통합되지 않습니다. 이는 최신 버전의 Solaris에 설치되도록 설계되었습니다. 그러나 시스템은 최소한 설치가 가능하도록 합리적으로 조정될 수 있도록 제작되었습니다. 이 경우 여러 측면을 변경해야 합니다.
incorporate
Solaris의 대부분의 FOSS 패키지는 종속성에 의해 제공되는 제약 조건을 완화할 수 있는 방식으로 병합됩니다 . 이름이 지정된 측면을 변경하여 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
버전 4.8에 및 gcc-gobjc-runtime
패키지가 설치되어 있음 을 알 수 있습니다 . 그 이유는 여전히 제한되어 있지만 우리가 하는 어떤 것도 이러한 제한과 충돌하지 않기 때문입니다. 일관성을 위해 잠금을 해제한 다음 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 설치에는 /usr/gcc
.
고쳐 쓰다: 그리고 다음 버전 중 어느 것도 /usr/gcc
5.x 버전이 아닙니다. 어디로 갔나요?
답변3
첫째, 의 목록이 pkg publisher
유용할 것입니다. 그리고 ASApkg list |grep gcc
그리고 설치되지 않은 것 같습니다. 출력에는 (2) pkgs 및 (8) 파일이 설치되고 있는 것으로만 표시됩니다.
설치하려면 제한 사항을 해제해야 할 수도 있습니다. 설치 결과는 FOSS 평가 체인에서 설치하고 있음을 알려줍니다. 출력에 제공된 링크를 확인하는 것이 좋습니다.
Oracle Solaris 11.3용으로 선택된 FOSS 평가 패키지에 액세스하는 방법
또한: 일반적으로 pkg search gcc
pkg뿐만 아니라 무언가가 설치된 위치를 찾는 데 도움이 되어야 합니까? A는 pkg contents <pkg>
pkg의 구성 요소를 찾는 데에도 유용합니다.
또한 gcc pkg는 모든 개발자 도구에 대해 여러 pkg를 설치해야 한다고 믿기 때문에 2개 대신 여러 pkg가 설치될 것으로 예상했습니다.
아마도 이것이 릴리스 저장소 아래에 원하는 패키지일까요? developer/gcc/gcc-c++-5