Đã tải xuống g ++ 4.8 từ PPA nhưng không thể đặt nó làm mặc định?


15

Tôi đã tải xuống g ++ 4.8 trên Ubuntu 12.10 bằng cách thực hiện:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-4.8

nhưng khi tôi làm:

sudo update-alternatives --config g++

để chuyển đổi phiên bản g ++, nó nói:

update-alternatives: error: no alternatives for g++.

Tuy nhiên nếu tôi làm:

g++ --version

nó nói rằng:

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Làm cách nào để đặt cài đặt g ++ 4.8 của tôi thành g ++ mặc định?

Câu trả lời:


11

Trước hết, bạn phải khám phá 4,8 nhị phân của tất cả các công cụ ở đâu:

$ which gcc-4.8
/usr/bin/gcc-4.8
$ which g++-4.8
/usr/bin/g++-4.8
$ ls /usr/bin/*-4.8
/usr/bin/cpp-4.8         /usr/bin/x86_64-linux-gnu-cpp-4.8
/usr/bin/g++-4.8         /usr/bin/x86_64-linux-gnu-g++-4.8
/usr/bin/gcc-4.8         /usr/bin/x86_64-linux-gnu-gcc-4.8
/usr/bin/gcc-ar-4.8      /usr/bin/x86_64-linux-gnu-gcc-ar-4.8
/usr/bin/gcc-nm-4.8      /usr/bin/x86_64-linux-gnu-gcc-nm-4.8
/usr/bin/gcc-ranlib-4.8  /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.8
/usr/bin/gcov-4.8

Vì vậy, chúng tôi có tất cả các tệp nhị phân của mình, bây giờ hãy xem liệu một số liên kết có sẵn cho các tệp nhị phân đó không:

$ cd /usr/bin
$ ls -l gcc* cpp g++
lrwxrwxrwx 1 root root      7 sep 18 14:02 cpp -> cpp-4.7
lrwxrwxrwx 1 root root      7 abr 22  2013 g++ -> g++-4.7
lrwxrwxrwx 1 root root      7 sep 18 14:02 gcc -> gcc-4.7

Như chúng ta có thể thấy, chỉ cpp, g++gcccó liên kết tượng trưng. Chúng tôi có hai lựa chọn ở đây.

Liên kết

Chúng tôi thay thế các liên kết tượng trưng bằng liên kết của chúng tôi, loại bỏ thực tế trước tiên:

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++

Sau đó tạo ra chúng ta

sudo ln -s /usr/bin/cpp-4.8 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++

Để hoàn nguyên nó, hãy sử dụng các lệnh tương tự nhưng thay vào đó là 4.7 hoặc 4.6

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/cpp-4.7 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.7 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.7 /usr/bin/g++

Khi tôi đã làm: ls -l gcc * cpp g ++ nó trả về: ls: không thể truy cập gcc *: Không có tập tin hoặc thư mục ls: không thể truy cập cpp: Không có tập tin hoặc thư mục ls: không thể truy cập g ++: Không có tập tin hoặc thư mục
user997112

Không yêu cầu lời xin lỗi :) Một khi tôi gọi hàm remove thì nó hoạt động, nhưng khi tôi đi tạo symlink "của chúng tôi" thì nó báo: sudo ln -s -T / usr / bin / cpp /usr/bin/cpp-4.8 ln: thất bại để tạo liên kết tượng trưng `/usr/bin/cpp-4.8 ': Tệp tồn tại
user997112

(Tôi đã gọi lệnh rm hai lần chỉ vì vậy lần thứ hai nó đã xác nhận / phàn nàn rằng các liên kết hiện có trên thực tế đã bị xóa)
user997112

3
Đây là một ý tưởng khủng khiếp . Có nhiều chương trình sử dụng gccđể biên dịch các mô-đun hạt nhân và một số trong số chúng (ví dụ Nvidia) sẽ âm thầm gặp sự cố khi gccchúng gọi sẽ không phải là chương trình mà kernel đã được biên dịch.
nbubis

1
@nbubis tốt, câu hỏi là "Làm cách nào để cài đặt g ++ 4.8 của tôi thành g ++ mặc định?", vì vậy, mọi người nên đoán xem ai làm việc này, họ biết họ đang làm gì, không? Mặt khác, bạn có thể đề xuất phương án nào?
Braiam

16

Bạn cần phải update-alternativesbiết rằng bạn có 2 trình biên dịch C ++, tạo một bản ghi cho mỗi trình biên dịch, sau đó định cấu hình trình biên dịch nào bạn muốn sử dụng. Điều này được thực hiện với những điều sau đây:

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6.3 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 40
sudo update-alternatives --config g++ 

Từ thời điểm này trở đi, điều duy nhất cần thiết khi chuyển đổi trình biên dịch là lệnh này:

sudo update-alternatives --config g++

Xem man update-alternativesđể biết thêm.

Nguồn: Làm thế nào để sử dụng nhiều phiên bản của gcc?


@Braiam Nó có thể được thực hiện theo cách tương tự với bất kỳ gói nào.
Radu Rădeanu

3
Ai đó có thể xây dựng trên 60 và 40? Tôi đã thấy điều này ở rất nhiều nơi
user997112

@ user997112 Tôi khuyên bạn nên đọc người đàn ông này, nhưng, nếu bạn thích hơn 70 và 30, thì hãy sử dụng 70 và 30 ...
Radu Rădeanu

1
@ user997112 đây là những số ưu tiên và chỉ có liên quan khi sử dụng --auto. bạn có thể xem một số ví dụ bằng cách sử dụngupdate-alternatives --display editor
Braiam

2
Vào ngày 12.04, tôi nhận được: update-thay thế: lỗi: thay thế g ++ không thể là chủ: nó là nô lệ của gcc
rickfoosusa

9

Đây là mô tả tuyệt vời và hướng dẫn từng bước làm thế nào để tạo và quản lý các lựa chọn thay thế chủ và nô lệ (gcc và g ++).

Một thời gian ngắn

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 
sudo update-alternatives --config gcc

Chào mừng bạn đến hỏi Ubuntu! Trong khi điều này về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây, và cung cấp liên kết để tham khảo.
Stormvirux

Bạn đúng. Tôi đã thêm phần thiết yếu
Anton K

1
Cứu ngày của tôi với những thứ nô lệ đó. tx
Lennart Rolland
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.