Làm cách nào để sử dụng GCC mới nhất trên Ubuntu?


132

Tôi muốn biên dịch chương trình của tôi với phiên bản mới nhất gcc.

Ubuntu 14.04 đi kèm với gcc 4.8.2, tuy nhiên có sẵn 4.9.0, hơn nữa, tôi thấy rằng nó có sẵn dưới dạng gói : gcc-4.9. Tôi đã cố gắng cài đặt nó

sudo apt-get install gcc-4.9

nhưng nó nói

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'gcc-4.9-base' for regex 'gcc-4.9'
gcc-4.9-base is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Có vẻ như nó đã được cài đặt, chỉ không phải là mặc định? Làm thế nào để tôi sử dụng nó để xây dựng chương trình của tôi?


Nếu bạn muốn cài đặt gcc-4.8, bạn cần sử dụng sudo apt-get install gcc-4.8. gcc-4.9, gcc-4.8, gcc-4.7, gcc-4.6Tất cả đều trong repo chính Ubuntu .

1
@Dumindu Nhưng làm thế nào để tôi sử dụng gcc-4.9cụ thể?
Nickolai Leschov

Gỡ cài đặt những người khác và cài đặt 4.9.

2
@Dumindu Chờ đã, bạn vừa bảo tôi làm những gì tôi vừa làm phải không? Nó không làm việc.
Nickolai Leschov

chuyển sang người dùng root: sudo su -goto /usr/binsau đó chạy ls -l gcc*và đăng đầu ra của bạn. sau đó tôi sẽ đăng câu trả lời của bạn
αsнι

Câu trả lời:


196

Cách tốt nhất để cài đặt chính xác gcc-4.9 và đặt nó làm phiên bản gcc mặc định của bạn sử dụng:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9 g++-4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9

Các --slave, với g++, sẽ gây g++được chuyển cùng với gcc, để cùng một phiên bản. Tuy nhiên, tại thời điểm này, gcc-4.9 sẽ là phiên bản duy nhất của bạn được định cấu hình update-alternatives, vì vậy hãy thêm 4.8 vào update-alternatives, vì vậy thực sự có một giải pháp thay thế, bằng cách sử dụng:

sudo apt-get install gcc-4.8 g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8

Sau đó, bạn có thể kiểm tra cái nào được đặt và thay đổi qua lại bằng cách sử dụng:

sudo update-alternatives --config gcc

LƯU Ý: Bạn có thể bỏ qua việc cài đặt Kho lưu trữ PPA và chỉ sử dụng /usr/bin/gcc-4.9-basenhưng tôi thích sử dụng các bộ công cụ cập nhật mới.


Đối với GCC 5.X hoặc 6, các gói (và tương ứng là các lệnh) chỉ được gọi gcc-5, gcc-6v.v. Điều này là do sự thay đổi trong sơ đồ phiên bản của GCC , trong đó 5.1 là bản phát hành GCC 5 đầu tiên và bản phát hành 5.X trong tương lai là để sửa lỗi .


Cảm ơn bạn đã chỉnh sửa @muru ... như tôi đã nói bên dưới, tôi đã mất khoảng 3 ngày rất mệt mỏi và các lựa chọn thay thế cập nhật không yêu cầu sudo và tôi nghĩ rằng tôi đã quên (-) trước nô lệ. :) Cảm ơn bạn.
SudoSURoot

Thửsudo apt-get -f install
SudoSURoot

4
Điều này hoạt động hoàn hảo. Ngoài ra, thay 5vào cho 4.9để có được GCC 5 làm việc trên Ubuntu. (Nhóm phát triển của tôi hiện chạy cả 4,9 và 5 cùng với nhau theo phương pháp của bạn.) Cảm ơn và +1!
CodeMouse92

2
@hwat Nó nên hoạt động gcc-6ngay bây giờ.
edwinksl

1
Điều này đã giúp tôi nhiều lần, nhưng tôi luôn quên - đảm bảo áp dụng cùng một giải pháp cho các tiện ích khác trong bộ sưu tập trình biên dịch GNU mà bạn có thể sử dụng! Ví dụ, GCOV sẽ phàn nàn về một phiên bản không khớp nếu bạn không, có thể tạo ra dữ liệu không chính xác.
Toby

23

Sử dụng Kiểm tra công cụ xây dựng PPA :

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9

Tôi không nghĩ GCC 4.9 đã có sẵn cho Ubuntu 14.04. Gói cơ sở ( gcc-4.9-base ) và trình biên dịch GCC Go 4.9 ( gccgo-4.9 ) có sẵn, nhưng các giao diện khác thì không. Tôi không biết tại sao.


1
@SudoSURoot nó có thể hoặc không được đặt làm mặc định, đó không phải là mối quan tâm của tôi (có những bài viết khác liên quan đến điều đó). Tuy nhiên, các giao diện C và C ++ của GCC 4.9 có thể được cài đặt vào ngày 14.04 hoàn toàn từ các kho chính thức là hoàn toàn sai, vì gcc-4.9-basegói không và sẽ không chứa giao diện nhị phân.
muru 14/2/2015

Bạn đã đúng về gói cơ sở. Như bạn sẽ thấy trong câu trả lời của mình, tôi đã sử dụng PPA. Tôi đã đăng bình luận trước, sau đó trả lời câu hỏi như đã nêu, từ câu hỏi ... Bởi vì chỉ cần thêm PPA và cài đặt 4.9 không cho phép nó cần thiết để "sử dụng gcc 4.9". Tôi nên xóa bình luận sau khi tôi trả lời câu hỏi. Tôi xin lỗi. Câu trả lời của tôi là những gì nên được tập trung vào. Tôi nhảy đến kết luận ... và bình luận nhanh. Tôi thực sự khá mới với việc sử dụng 14.04 kể từ khi tôi có máy chủ chuyên dụng. Tôi sẽ gồng mình để đảm bảo rằng tôi đã không bỏ phiếu và tôi sẽ sửa nó nếu tôi làm vậy.
SudoSURoot

@SudoSURoot ổn. Mặc dù vậy, trừ khi OP gặp vấn đề với việc gọi điện thoại gcc-4.9hoặc g++-4.9thay vì gcchoặc g++, tôi sẽ kiên quyết không cập nhật các lựa chọn thay thế.
muru 14/2/2015

Tôi hoàn toàn hiểu. Mặc dù vậy, tôi xây dựng các hệ thống Android, sử dụng rất nhiều $ (mà gcc) và $ (mà g ++), v.v ... Vì vậy, tôi luôn phải đặt mặc định thành phiên bản tôi muốn sử dụng. Một số mã hạt nhân của tôi sẽ không biên dịch với máy chủ gcc-4.8 nên tôi phải cập nhật. Tôi chỉ lặp lại những gì làm việc cho tôi. Cảm ơn vì đã nhắc nhở tôi mặc dù ... Giống như tôi đã nói trong bản chỉnh sửa của mình, từ bình luận cuối cùng, tôi có thể đã bỏ phiếu sớm, nếu vậy tôi sẽ sửa nó. Tôi đã mất 2 hoặc 3 ngày để làm việc với nguồn kernel của mình khi tôi đăng những thứ này. Mọi người đều có cách của họ ... Tôi chỉ tìm thấy thấu đáo hơn câu trả lời của tôi những câu hỏi ít tôi g
SudoSURoot

Gói mới nhất là ATM gcc-7
Elder Geek

5

Ubuntu 16.04 trở lên

Bạn đã có thể cài đặt gcc 7.0 trong Ubuntu 18.04 từ kho lưu trữ mặc định. Để cài đặt gcc-7 trong Ubuntu 17.10, 18.04 và 18.10, hãy mở terminal và gõ:

sudo apt install gcc-7 

Để cài đặt gcc-8 trong Ubuntu 18.04 trở lên, hãy mở terminal và gõ:

sudo apt install gcc-8

Để cài đặt gcc-9 trong Ubuntu 19.04 và sau đó mở thiết bị đầu cuối và gõ:

sudo apt install gcc-9

Bạn có thể cài đặt gcc-7 trong Ubuntu 16.04 từ ppa: jonathonf / gcc-7.1.

sudo add-apt-repository ppa:jonathonf/gcc-7.1  
sudo apt update  
sudo apt install gcc-7  

Bạn có thể cài đặt gcc-8 trong Ubuntu 16.04 từ ppa: jonathonf / gcc-8.0.

sudo add-apt-repository ppa:jonathonf/gcc-8.0  
sudo apt update  
sudo apt install gcc-8 

3

Để gọi gcc 4.9 cụ thể, sử dụng gcc-4.9tại dấu nhắc lệnh.

Tất cả các phiên bản gcc bạn đã cài đặt có thể được gọi riêng bằng cách thêm dấu gạch nối và số phiên bản ở cuối gcc. Trong trường hợp của bạn, gcc-4.8gcc-4.9nên có sẵn. Trong một thiết bị đầu cuối, nhập gcc-(lưu ý dấu gạch nối) và tab đẩy hai lần để xem có phiên bản nào khác được cài đặt không.

Lưu ý rằng gcc mặc định có khả năng vẫn là 4,8. (Sử dụng gcc -vđể xác minh điều này.) Thật không may thay đổi mặc định là không đáng kể nếu bạn đã cài đặt gcc-4.9 từ kho lưu trữ mặc định vì nó không thêm mục nhập thay thế cập nhật. Nếu bạn quan tâm đến cách thay đổi mặc định, hãy xem câu trả lời cho câu hỏi này .


Làm thế nào để tôi thực hiện một dự án dựa trên makefile và có thể xây dựng cơ sở hạ tầng xây dựng khác gcc-4.9thay vì gcc?
Nickolai Leschov

1
Cách tốt nhất để đảm bảo gcc-4.9 được sử dụng trên các hệ thống xây dựng là thay đổi gcc mặc định. Theo liên kết tôi cung cấp trong câu trả lời của tôi để biết cách làm điều này. Ngoài ra, bạn có thể tạo một liên kết tượng trưng, ​​mặc dù tôi khuyên bạn nên chống lại điều này trừ trường hợp cuối cùng vì người quản lý gói có thể khiếu nại khi cập nhật gcc. Nếu bạn nhấn mạnh : sudo rm /usr/bin/gcc; sudo ln -s /usr/bin/gcc-4.9 /usr/bin/gcc. Để trở lại gcc-4.8 mặc định, chỉ cần thay gcc-4.9 bằng gcc-4.8. Bạn có thể phải làm điều này với g ++ và các trình biên dịch GNU khác.
holocronweaver

GCC 4.9 không có sẵn trong Ubuntu 14.04 (ngoại trừ trình biên dịch GCC Go ), vì vậy trong khi câu trả lời này có thể sẽ hoạt động trong Ubuntu 14.10, thì bây giờ nó không giúp ích gì. :-)
Søren Løvborg

Trên thực tế nó có sẵn trong Ubuntu 14.04, mặc dù nó có thể là một sai lầm: packages.ubuntu.com/trusty/gcc-4.9-base . Tôi đã sử dụng nó từ tháng Tư.
holocronweaver

0

Ok, chúng ta hãy làm điều này:

GCC   9 8 7 6 5 4
19.04 M D M M
18.10   D M M M
18.04 P M D M M
16.04 P P P P D M

Tất cả các câu hỏi:

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.