ดาวน์โหลด g ++ 4.8 จาก PPA แต่ไม่สามารถตั้งเป็นค่าเริ่มต้นได้หรือไม่


15

ฉันได้ดาวน์โหลด g ++ 4.8 บน Ubuntu 12.10 โดยทำ:

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

แต่เมื่อฉัน:

sudo update-alternatives --config g++

หากต้องการสลับรุ่น g ++ จะมีข้อความว่า:

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

อย่างไรก็ตามถ้าฉัน:

g++ --version

มันบอกว่า:

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.

ฉันจะตั้งค่าการติดตั้ง g ++ 4.8 เป็น g ++ เริ่มต้นได้อย่างไร

คำตอบ:


11

ก่อนอื่นคุณต้องค้นหาว่า 4.8 ไบนารีของเครื่องมือทั้งหมดอยู่ที่ใด:

$ 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

ดังนั้นเรามีไบนารี่ทั้งหมดของเราตอนนี้มาดูกันว่ามีการเชื่อมโยงบางอย่างสำหรับไบนารีดังกล่าวหรือไม่:

$ 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

ในฐานะที่เราสามารถมองเห็นเพียงcpp, g++และgccมีการเชื่อมโยงสัญลักษณ์ เรามีสองตัวเลือกที่นี่

symlinking

เราแทนที่ symlink ด้วยของเราโดยลบค่าจริงออกก่อน:

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

จากนั้นสร้างของเรา

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++

หากต้องการเปลี่ยนกลับให้ใช้คำสั่งเดิม แต่ใช้กับ 4.7 หรือ 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++

เมื่อฉันทำ: ls -l gcc * cpp g ++ มันกลับมา: ls: ไม่สามารถเข้าถึง gcc *: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว ls: ไม่สามารถเข้าถึง cpp: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว ls: ไม่สามารถเข้าถึง g ++: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
user997112

ไม่ต้องขอโทษอีกต่อไป :) เมื่อฉันเรียกใช้ฟังก์ชันลบมันทำงานได้ แต่เมื่อฉันไปสร้าง symlink ของเรามันบอกว่า: sudo ln -s -T / usr / bin / cpp /usr/bin/cpp-4.8 ln: ล้มเหลว การสร้างลิงค์สัญลักษณ์ `/usr/bin/cpp-4.8 ': มีไฟล์อยู่
user997112

(ฉันเรียกว่าคำสั่ง rm สองครั้งดังนั้นในครั้งที่สองก็ยืนยัน / บ่นว่าการเชื่อมโยงที่มีอยู่ในความเป็นจริงถูกลบ)
user997112

3
นี่เป็นความคิดที่แย่มาก มีหลายโปรแกรมที่ใช้gccในการรวบรวมโมดูลเคอร์เนลและบางส่วนของพวกเขา (เช่น Nvidia) จะล้มเหลวอย่างเงียบ ๆ เมื่อgccพวกเขาเรียกจะไม่เป็นหนึ่งในเคอร์เนลที่รวบรวม
nbubis

1
@ ไม่มีปัญหาคำถามคือ "ฉันจะตั้งค่าการติดตั้ง g ++ 4.8 เป็นค่าเริ่มต้น g ++ ได้อย่างไร" ดังนั้นเราควรเข้าใจว่าใครทำสิ่งนี้พวกเขารู้ว่าพวกเขากำลังทำอะไรอยู่ ในทางกลับกันคุณสามารถเสนอทางเลือกอะไรได้บ้าง
Braiam

16

คุณต้องแจ้งให้update-alternativesทราบว่าคุณมีคอมไพเลอร์ 2 C ++ สร้างเรคคอร์ดสำหรับแต่ละอันจากนั้นกำหนดว่าคุณต้องการใช้คอมไพเลอร์ตัวใด สิ่งนี้ทำด้วยสิ่งต่อไปนี้:

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++ 

จากจุดนี้ไปข้างหน้าสิ่งเดียวที่จำเป็นเมื่อเปลี่ยนคอมไพเลอร์คือคำสั่งนี้:

sudo update-alternatives --config g++

ดูman update-alternativesข้อมูลเพิ่มเติม

ที่มา: วิธีใช้ gcc หลายอินสแตนซ์?


@Braiam มันสามารถทำในลักษณะเดียวกันกับแพคเกจใด ๆ
Radu Rădeanu

3
ใครบางคนสามารถอธิบายรายละเอียดเกี่ยวกับ 60 และ 40? ฉันเคยเห็นสิ่งนี้ในหลาย ๆ ที่
user997112

@ user997112 ฉันขอแนะนำให้คุณอ่านคน แต่ถ้าคุณชอบมากกว่า 70 และ 30 แล้วใช้ 70 และ 30 ...
Radu Rădeanu

1
@ user997112 เหล่านี้เป็นหมายเลขลำดับความสำคัญและมีความเกี่ยวข้องเฉพาะเมื่อใช้ - อัตโนมัติ คุณสามารถดูตัวอย่างโดยใช้update-alternatives --display editor
Braiam

2
ในวันที่ 12.04 ฉันได้รับ: การปรับปรุงทางเลือก: ข้อผิดพลาด: ทางเลือก g ++ ไม่สามารถเป็นเจ้านายได้: มันเป็นทาสของ gcc
rickfoosusa

9

นี่คือคำอธิบายที่ยอดเยี่ยมและคำแนะนำทีละขั้นตอนวิธีการสร้างและจัดการตัวเลือก master และ slave (gcc และ g ++)

ไม่นานมันก็เป็น

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

ยินดีต้อนรับสู่ถาม Ubuntu! ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
Stormvirux

คุณถูก. ฉันเพิ่มส่วนสำคัญ
Anton K

1
บันทึกวันของฉันด้วยสิ่งของทาส tx
Lennart Rolland
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.