GCC-5 ở đâu sau khi cài đặt nó trên Solaris 11?


9

Xin vui lòng tha thứ cho sự thiếu hiểu biết của tôi ... Tôi chỉ sử dụng Solaris để thử nghiệm các thư viện C / C ++ mà tôi quan tâm. Tôi không phải là quản trị viên Solaris hoặc người dùng Solaris.

Tôi đã cài đặt GCC-5 trên Solaris 11.3, x86 vì tôi cần một trình biên dịch C ++ hỗ trợ -std=c++11(xem bên dưới để biết đầu ra gói). GCC bản địa của Sun là 4,8 và nó không hỗ trợ tốt C ++ 11 (hoặc hoàn toàn không).

Thật không may, tôi không thể tìm thấy nó sau khi cài đặt:

$ g++-5 --version
-bash: g++-5: command not found  

$ sudo find /usr -name gcc-5
$ sudo find /bin -name gcc-5
$

Và cho đầy đủ:

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

Trình biên dịch nằm ở đâu?


Theo Cài đặt GCC trên Oracle Solaris 11 trên Stack Overflow, nó được coi /usr/bin/gcclà một liên kết tượng trưng. Nhưng câu trả lời dường như bị tắt một chút:

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

Theo GCC bị thiếu từ Solaris 11 và máy chủ đã được triển khai trên Server Fault:

/usr/sfw/binlà đường dẫn gcc được đóng gói với Solaris 10. Trên Solaris 11.1, gcc, khi được cài đặt, có sẵn trực tiếp /usr/bindưới dạng một liên kết tượng trưng đến/usr/gcc/<version>/bin/gcc

Câu trả lời dường như cũng bị tắt một chút.


$ 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

Sau khi cài đặt 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

Và:

~$ 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.

Hãy thử sử dụng: gcc --version và không gcc-5 --version
Slh47

1
Là / usr / gcc là một liên kết mềm?
FloHe

@FloHe - Cả hai /bin/gcc/usr/bin/gccđều là GCC 4.8. Tôi đã cập nhật câu hỏi với đầu ra của các lệnh.

Bạn có chắc chắn cài đặt hoàn thành chính xác?
Rory Alsop

Có thể thử:which gcc-5
FloHe

Câu trả lời:


10

TL; DR:

# pkg change-facet \
      version-lock.system/library/gcc/gcc-c-runtime=false \
      version-lock.system/library/gcc/gcc-c++-runtime=false

và thử lại.

Vì vậy, vấn đề là gcc-5cái được gọi là gói "nhóm". Đó là, nó bao gồm (ít nhất là chủ yếu) của một loạt các groupphụ thuộc. Một groupphụ thuộc là một sẽ được cài đặt nếu có thể, nhưng bỏ qua nếu không. Trong trường hợp này, không thể cài đặt một hoặc nhiều phụ thuộc của chúng gcc-5, vì vậy chúng bị bỏ qua và bạn đã kết thúc với ít hơn bạn mong đợi.

Khi điều đó xảy ra (cho dù đó là ít gói hơn, hoặc gói ở một phiên bản khác), điều đầu tiên bạn nên làm là nói pkgnhững gì bạn thực sự mong đợi. (Bây giờ, ngắt kết nối ở đây là làm thế nào để biết những gì mong đợi; mà không biết làm thế nào để kiểm tra gcc-5. Để biết thông tin đó, hoặc thậm chí biết rằng bạn có thể phải, tôi không chắc chắn làm thế nào để trả lời đó) Trong trường hợp này, chọn một trong phụ thuộc của nó để xem nếu nó giúp; nói, gcc-c-5(bạn đã làm theo bước này gcc-c++-5, điều này cho bạn vấn đề tương tự như tôi trình bày ở đây, nhưng tôi muốn kết hợp tất cả lại trong một câu trả lời). Điều này nói pkgkhông bỏ qua việc không thể cài đặt gcc-c-5, nhưng thực sự phàn nàn chi tiết về lý do tại sao nó không thể được cài đặt. Hy vọng rằng sẽ có một cái gì đó trong đầu ra để cho chúng ta manh mối về những việc cần làm tiếp theo:

# 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]

Khi bạn nhận được một mớ hỗn độn của bộ giải như thế này, bạn thường muốn tìm kiếm vấn đề thụt sâu nhất và xem liệu bạn có thể sửa nó không. Trong trường hợp này, bạn thấy rằng nó không thể cài đặt gcc-c-runtime@5.4.0-5.12.0.0.0.115.0vì nó bị loại trừ bởi một công ty được cài đặt.

Có lẽ một sự lạc đề là cần thiết: một sự kết hợp là gì? Giống như một gói nhóm, đó là một gói chủ yếu cung cấp các phụ thuộc, trong trường hợp này là các incorporatephụ thuộc. Những phụ thuộc này không bao giờ thực sự gây ra các gói được cài đặt; họ chỉ cần đặt các ràng buộc trên các gói có thể được cài đặt. Cụ thể, kết hợp foo@1.2có nghĩa là nếu foođược cài đặt, nó phải nằm trong phạm vi phiên bản [1.2, 1.3); nghĩa là, tối thiểu 1.2(bao gồm) và tối đa 1.3(độc quyền) hoặc bất cứ điều gì phù hợp 1.2.x.y.z.....

Trong trường hợp này, việc kết hợp userland-incorporationđã được cài đặt trên hệ thống đã đặt ra một ràng buộc về gcc-c-runtimeviệc không tương thích với phiên bản gcc-c-runtimecài đặt đó gcc-c-5yêu cầu.

Đó là nơi chúng tôi gặp phải một trong những điều kỳ lạ của chương trình đánh giá Solaris FOSS. Các gói có sẵn ở đó không được tích hợp tốt với phần còn lại của hệ thống; chúng được thiết kế để được cài đặt trên phiên bản mới hơn của Solaris. Nhưng chúng đã được xây dựng sao cho ít nhất hệ thống có thể được mát xa hoàn toàn để cho phép chúng được cài đặt. Trong trường hợp này, bạn phải thay đổi một vài khía cạnh.

Hầu hết các gói FOSS trong Solaris được kết hợp theo cách mà các ràng buộc được cung cấp bởi incorporatesự phụ thuộc đó có thể được nới lỏng. Bạn có thể làm điều đó bằng cách thay đổi các khía cạnh được đặt tên bởi version-lock.<pkg-name>đến false. Trong trường hợp này gcc-c-runtimegcc-c++-runtimelà hai gói chặn cài đặt bạn muốn, vì vậy (như trên):

# pkg change-facet \
      version-lock.system/library/gcc/gcc-c-runtime=false \
      version-lock.system/library/gcc/gcc-c++-runtime=false

Điều này sẽ cung cấp một chút đầu ra, nhưng dường như không làm được gì nhiều. Tuy nhiên, khi đã xong, chúng ta có thể thử lại:

# 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

Và voila, chúng tôi nhận được một loạt các gói được cài đặt, trong đó thực sự có chứa các công cụ. Từ đây, bây giờ bạn có thể gõ gcc --versionvà thấy rằng nó thực sự là 5.4.0. Cũng lưu ý rằng hai gói mà chúng tôi đã mở khóa đã được nâng cấp, khả năng có sẵn sau khi mở khóa.

Bạn có thể hỏi tại sao chúng tôi không cần phải mở khóa bất kỳ khía cạnh nào khác. Lý do cho điều đó là Solaris 11.3 không cung cấp GCC 5 và do đó không cung cấp bất kỳ ràng buộc nào trên các phiên bản gói của nó. Vì vậy, tất cả các gcc-*-5gói đã không bị giới hạn và không cần phải mở khóa để giảm bớt các ràng buộc.

Bạn có thể nhận thấy rằng các gói gcc-gfortran-runtimegcc-gobjc-runtimeđã được cài đặt ở phiên bản 4.8 của chúng. Đó là bởi vì họ vẫn bị hạn chế, nhưng chúng tôi không có gì mâu thuẫn với những ràng buộc đó. Để thống nhất, có lẽ bạn cũng nên mở khóa chúng, sau đó nâng cấp chúng lên phiên bản 5.x của chúng (hoặc, nếu bạn đã đạt được điều này trước khi thử bất cứ điều gì, chỉ cần mở khóa chúng từ đầu).


Cảm ơn @Danek, và xin lỗi vì đã trả lời trễ. Tôi đang trong một chu kỳ thử nghiệm khác của Solaris. Tôi chạy pkg change-facettheo sau pkg install -nv gcc-5 gcc-c-5. Đầu ra sạch sẽ, có nghĩa là tôi không thấy lỗi hoặc đầu ra như bạn đã nêu chi tiết trên đường dẫn từ chối. Sau đó GCC vẫn là 4.8.2 và gcc-5 --versionkết quả là gcc-5: command not found. Tôi dường như vẫn còn thiếu một cái gì đó.

Các phiên bản khác nhau của gcc là trong /usr/gcc. Chúng tôi không gửi /usr/bin/gcc-<version>, mặc dù đó có thể là một lỗi đáng để nộp. Bạn có thể sử dụng /usr/gcc/5/bin/gcctrực tiếp hoặc bạn có thể cho hệ thống đóng gói biết điều gì nên có tại /usr/bin/gcc: pkg set-mediator -V 5 gcc.
Danek Duvall

1

Thử cái này:

ls -l /usr/bin/gcc

Bạn có thể sẽ thấy một cái gì đó như

... /usr/bin/gcc -> ../gcc/4.8/bin/gcc

GCC 5.x nên có trong /usr/gcc/5.x/...

Bản cài đặt Solaris 11 của tôi có nhiều phiên bản GCC /usr/gcc.

Cập nhật : Và không có phiên bản nào trong số đó /usr/gcclà phiên bản 5.x. Nó đi đâu


Cảm ơn Andrew. Tôi không có /usr/gcc/5.x/sau khi cài đặt. Bạn đã cài đặt GCC 5.x như thế nào?

@jww Tôi có một loạt các phiên bản 4.x khác nhau. Không có 5, mặc dù?!?! Lạ thật. Tôi sẽ phải đào sâu vào vấn đề này.
Andrew Henle

@jww pkg search gccHiển thị cái gì? Các basenamemục sẽ hiển thị tất cả các phiên bản của gcclệnh được cài đặt trên hệ thống của bạn.
Andrew Henle

@jww Dòng 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 Điều đó dường như cho thấy bạn nên /usr/gcc/5.3/bin/gcccài đặt. Dòng 289 cũng hiển thị một 5.3.0-5.12.0.0.0.105.1phiên bản. Không pkg search -l gcc | grep ^basenamethể hiện điều gì? Điều đó sẽ chỉ hiển thị các tập tin có tên gccthực sự được cài đặt.
Andrew Henle

Đã thêm vào câu hỏi (khối cuối cùng).

1

Đầu tiên, một danh sách từ pkg publishersẽ hữu ích. Cũng như mộtpkg list |grep gcc

Và không có vẻ như nó đã được cài đặt, đầu ra của bạn chỉ hiển thị (2) pkgs và (8) tệp đang được cài đặt.

Bạn có thể cần phải giải phóng các ràng buộc để có thể cài đặt. Đầu ra của bạn từ các gợi ý cài đặt mà bạn đang cài đặt từ chuỗi eval FOSS. Đề nghị bạn xem lại cùng với liên kết được cung cấp trong đầu ra của bạn:

Cách truy cập các gói đánh giá FOSS được chọn cho Oracle Solaris 11.3

Ngoài ra: Thông thường pkg search gccnên giúp tìm nơi cài đặt một cái gì đó, cũng như pkg? A pkg contents <pkg>cũng hữu ích cho việc tìm kiếm những gì tạo nên một pkg.

Tôi cũng đã dự kiến ​​sẽ thấy nhiều pkgs được cài đặt so với chỉ 2 vì tôi tin rằng gcc pkg nên cố gắng cài đặt nhiều pkgs cho tất cả các công cụ dành cho nhà phát triển.

Có lẽ đây là pkg bạn muốn theo repo phát hành? developer/gcc/gcc-c++-5


Cảm ơn. sudo pkg install developer/gcc/gcc-c++-5kết quả Reject: pkg://solaris/developer/gcc/gcc-c++-5@5.4.0-5.12.0.0.0.115.0với 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.

Hãy thử một danh sách `pkg -a | grep c ++` để tìm phiên bản của gcc. Và trước khi cài đặt thực tế, hãy thử cài đặt chạy khô dài dòng để xem liệu điều đó có cung cấp cho bạn bất kỳ thông tin nào về nguyên nhân của sự cố không. tức là: pkg install -nv <pkg> Bạn đã kiểm tra liên kết ở trên để sử dụng pkgs eval chưa? Tôi vẫn chưa thử sử dụng pkgs eval, nhưng có vẻ như bạn có thể cần phải mở khóa một số pkgs để cài đặt / cập nhật chúng.
buồn ngủ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.