วิธีการติดตั้ง GCC 5 บนเดเบียนเจสซี 8.1


21

ฉันลองวิธีแก้ไขปัญหามากมายเพื่อติดตั้งอัปเดตสำหรับคอมไพเลอร์ gcc ของฉันบนเซิร์ฟเวอร์เดเบียน ไม่มีใครทำงานเลย ฉันต้องการการอัปเดตคอมไพเลอร์เพื่อใช้คุณสมบัติใหม่ของ c ++ 11 เนื่องจากนี่เป็น libcxx11 ABI ที่เสถียรและการสนับสนุนที่เสถียรสำหรับ C ++ 11 (ดูที่นี่ ) รับเฉพาะรุ่น `GLIBCXX_3.4.21 'ซึ่งไม่รวมอยู่ในคอมไพเลอร์ปัจจุบันของฉัน gcc เวอร์ชัน 4.9.2 (Debian 4.9.2-10)

ตัวชี้วิธีแก้ปัญหาบางอย่างจะมีประโยชน์ ขอบคุณล่วงหน้า.

ลิงก์ไปยังฟอรัมที่เกี่ยวข้องกับปัญหาของฉันซึ่งฉันได้ลองไปแล้ว:

1 2 3 (ไม่ใช่โซลูชันที่เกี่ยวข้องทั้งหมดสำหรับอูบุนตู แต่ฉันยังหา gcc-5 ในเซิร์ฟเวอร์ ftp ของ debian ไม่ได้)


ที่มีให้ใน Debian / การทดสอบและอย่างที่คุณเห็นเกี่ยวข้องกับการเปลี่ยนแปลงในไลบรารีรันไทม์ บางคนอาจแนะนำให้คุณทำเช่นนี้เป็นแพ็คเกจ Debian แต่ผลกระทบจะแตกต่างกันเล็กน้อยจากการเปลี่ยนเป็นการกำหนดค่าการทดสอบเนื่องจากแพคเกจที่ได้รับผลกระทบมีจำนวนมาก
Thomas Dickey

ทำไมคุณต้องการการสนับสนุนABIใหม่เป็นพิเศษ คุณสามารถสร้างรหัส C ++ 11 ส่วนใหญ่ได้ด้วย gcc ของ Debian 8 4.9.2 คุณจะต้องคอมไพล์ใหม่เมื่อ Debian 9 เปิดตัว หากคุณไม่สามารถรอได้ทางออกที่ง่ายที่สุดก็คือการเปลี่ยนไปใช้testingแต่นั่นอาจไม่ใช่ความคิดที่ดีในเซิร์ฟเวอร์ (ขึ้นอยู่กับว่าคุณหมายถึงอะไรโดยเซิร์ฟเวอร์) การเปลี่ยนจาก gcc 4.9 เป็น gcc 5 เกี่ยวข้องกับการเปลี่ยนห้องสมุดดังนั้นคุณจึงต้องอยู่ในโลกแห่งความเจ็บปวดหากคุณลองทำด้วยตัวเอง!
Stephen Kitt

ฉันเห็นด้วยกับสิ่งที่โทมัสและสตีเฟ่นพูดยกเว้นฉันกังวลน้อยมากเกี่ยวกับแนวคิดของการใช้การทดสอบบนเซิร์ฟเวอร์ ไม่ใช่เซิร์ฟเวอร์ทุกตัวที่ต้องใช้ไบนารีและไลบรารี่ในระยะยาว (ซึ่งหมายถึง "เสถียร" ในบริบทเดเบียน) สำหรับเซิร์ฟเวอร์บางเครื่องที่ติดตามการทดสอบหรือแม้กระทั่งมีความเสถียรก็มีประโยชน์มากกว่า (ถ้าจำเป็นต้องใช้คุณสมบัติ เพื่อนำหน้าสคริปต์ kiddies) อย่างไรก็ตามการรันการทดสอบ / ไม่เสถียรบนเซิร์ฟเวอร์ที่ใช้งานจริง ๆ นั้นต้องการทักษะและความรู้เกี่ยวกับ Debian เป็นอย่างมากในการแก้ไขปัญหาการแตกหักเป็นครั้งคราว ทดสอบการอัพเกรดบนเครื่องอื่นหรือ VMs ก่อน
cas

@cas ฉันไม่ได้นึกถึงความเสถียรของไบนารี แต่เป็นข้อเสียเปรียบหลักสองประการของtesting(ใช้ด้วยตัวเอง): บางครั้งแพ็กเกจจะถูกลบออกชั่วคราว (ดังนั้นการตั้งค่าที่คุณเพิ่งตรวจสอบในการทดสอบ VM อาจไม่สามารถใช้ได้อย่างง่ายดาย) และการแก้ไขความปลอดภัยอาจล่าช้า (บางครั้งเป็นเวลานานหากtestingอยู่ระหว่างการเปลี่ยนแปลงของห้องสมุดขนาดใหญ่แม้ว่าจะมีtesting-securityกรณีเช่นนี้)
Stephen Kitt

1
หากคุณคอมไพล์โปรแกรมของคุณใหม่บนระบบ Debian (แทนที่จะทำการคัดลอกมัน) มันน่าจะใช้ได้ดี
Stephen Kitt

คำตอบ:


13

ฉันต้องการ GCC 5+ ที่ติดตั้งบนเดเบียนเจสซีและเช่นเดียวกับการทดสอบเดเบียน (อย่างน้อยวันที่ 16 มิ.ย. ) คุณสามารถใช้ apt-pinning เพื่อติดตั้งแพ็คเกจที่มีให้ (ดูhttps://wiki.debian.org/AptPreferences ) .

ในการติดตั้ง GCC 5+ จากการทดสอบบน debian jessie โดยใช้ apt-pinning:

  1. เพิ่ม repian การทดสอบ repo ไปยังแหล่ง apt ของคุณโดยสร้างไฟล์ในไดเรกทอรี/etc/apt/sources.list.dที่มีบรรทัด

    deb http://ftp.us.debian.org/debian testing main contrib non-free

  2. สั่งให้เดเบียนใช้แหล่งที่มาของการทดสอบกับแพ็คเกจบางอย่างโดยการสร้างไฟล์/etc/apt/preferences.dที่มีสิ่งต่อไปนี้:

    Package: *
    Pin: release a=testing
    Pin-Priority: 100
    
  3. อัพเดทฐานข้อมูลฉลาด: sudo apt-get update

  4. ติดตั้ง gcc จากการทดสอบ: sudo apt-get install -t testing gcc

    โปรดทราบว่าการใช้-t testingคุณบอก apt-get เพื่อติดตั้ง gcc จากแหล่งทดสอบตามที่กำหนดไว้ก่อนหน้านี้

ฉันขอแนะนำอย่างยิ่งให้ล้างการรวบรวมและรวบรวมการอ้างอิงใด ๆ อีกครั้งก่อนที่จะรวบรวมแหล่งที่มาของคุณอีกครั้ง

มีความสุข!


1
ฉันไม่เคยลอง (ฉันไม่ต้องการลอง) แต่ขั้นตอนของคุณน่าสนใจ มีชุดซอฟต์แวร์ไม่มากที่ผูกติดแน่นและผ่านระบบเดเบียนทั้งหมดเช่นเดียวกับ GCC ขั้นตอนของคุณใช้งานได้จริงหรือ หรือมันทำให้เกิดปัญหามากกว่าที่จะแก้? อยากรู้อยากเห็น
บาท

1
ฉันลองมันด้วยผลลัพธ์ที่ดี: ฉันสามารถรวบรวมสิ่งที่ฉันสร้างได้อย่างประสบความสำเร็จและระบบยังคงทำงานอย่างไม่มีปัญหาอย่างไรก็ตามคุณอาจพูดถูก: การเปลี่ยนรุ่น GCC อาจเป็นการรวบรวมแพ็คเกจอื่น ๆ (เช่นการรวบรวมซอร์สเมื่อติดตั้งแพ็คเกจด้วยpip) แต่ฉันคิดว่าขั้นตอนนี้เป็นวิธีการที่บุกรุกน้อยที่สุดเพราะaptจะติดตามว่าแพ็คเกจใดขึ้นอยู่กับ GCC และจะติดตั้งเวอร์ชันที่เข้ากันได้ตามต้องการ (เท่าที่ฉันจำได้)
llekn

2
หมายเหตุสำหรับขั้นตอนที่ 2: ไฟล์ใน /etc/apt/preferences.d/ ไม่ควรมีจุด "" ในชื่อไฟล์หรือสิ้นสุดใน ".pref" มิฉะนั้นไฟล์นี้จะถูกละเว้น คำอธิบายของความหมายของค่า 100 และเหตุผลที่เลือกจะได้รับการชื่นชม
Ludwig Schulze

ดังที่ฉันเข้าใจยิ่งPin-Priorityแพ็คเกจได้รับมากขึ้นเท่าใดก็ยิ่งได้รับความพึงพอใจมากขึ้นเท่านั้นเมื่อเทียบกับแพ็คเกจอื่นที่มีจำนวนต่ำกว่า ดังนั้นในขณะที่เดเบียนของ AptPrefences หน้ารัฐtestingโดยค่าเริ่มต้นได้รับPin-Priority: 900การทำแพ็กเกจทั้งหมดจากtestingที่จะติดตั้งโดยค่าเริ่มต้น ดังนั้นการระบุว่าtestingจะมีลำดับความสำคัญPin-Priority: 100ลดลงtestingทำให้พวกเขาสามารถติดตั้งได้เมื่อมีการร้องขอเมื่อระบุเป้าหมายที่apt-get install -t testing ...
llekn

1
@ LeeK-B แน่นอนว่าการใช้Package: gccการอัพเกรดระบบทั้งหมดเป็นการทดสอบ เอกสารเกี่ยวกับapt-prefencesความสับสนดังนั้นฉันคิดว่านี่คือสิ่งที่เกิดขึ้น: 1: เนื่องจากแพ็คเกจจากการทดสอบมีรุ่นที่ใหญ่กว่าโดยค่าเริ่มต้นพวกเขามีความสำคัญมากกว่ามาตรฐาน 2: การระบุแพ็กเกจ: gccด้วยPin-priority: 100ทำให้แพ็คเกจทั้งหมดจากการทดสอบมีลำดับความสำคัญเริ่มต้น มาตรฐาน) gccยกเว้น ตรงข้ามกับที่เราต้องการ ฉันอัปเดตคำตอบเพื่อหลีกเลี่ยงข้อผิดพลาดนี้
llekn

6

หากต้องการรวมคำตอบก่อนหน้า 2 รายการเป็นคำตอบที่ใช้ได้

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" >> /etc/apt/sources.list.d/unstable.list
apt-get update
apt-get install -t unstable gcc-5

แต่!!! ใช้สิ่งนี้ด้วยความเสี่ยงของคุณเองในขณะที่คุณกำลังติดตั้งแพ็กเกจไม่เสถียร คุณอาจต้องการลบ/etc/apt/sources.list.d/unstable.listเมื่อคุณติดตั้งแพ็คเกจแล้ว

หากเป็นไปได้ให้ติดตั้งใต้ Docker เพื่อไม่ให้เลอะ OS ของคุณ ไมล์สะสมของคุณอาจแตกต่างกันไป


4

ตั้งแต่วันที่ 2017-02-19, gcc-5 ได้ถูกลบออกจากการทดสอบ:

https://tracker.debian.org/pkg/gcc-5

คุณสามารถapt-get install gcc-5ถ้าคุณรันบรรทัดนี้เป็น root ครั้งแรก:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" > /etc/apt/sources.list.d/unstable.list

จากนั้นคุณอาจต้องการเปลี่ยนลำดับความสำคัญของแหล่งข้อมูลนั้น/etc/apt/preferences.dตามคำตอบของ llekn


1

ฉันมีปัญหาเมื่อสัปดาห์ที่แล้ว ดูเหมือนว่าตั้งแต่ 2019-01-23 gcc-5 ถูกลบออกจากที่เก็บอย่างสมบูรณ์แล้ว (ดูhttps://tracker.debian.org/pkg/gcc-5 )

หากคุณต้องการมันฉันคิดว่าคุณสามารถรวบรวมจากแหล่งที่มา ฉันจะหาวิธีที่จะลดการพึ่งพาจากระบบของฉัน

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