คำถามติดแท็ก gcc

คำถามเกี่ยวกับ GNU Compiler Collection Suite

4
ทำไม FreeBSD ถึงเลิกใช้ GCC เพื่อสนับสนุน Clang / LLVM
ดังนั้นผมท่องเน็ตและสะดุดเข้ากับบทความนี้ มันเป็นพื้นระบุว่าFreeBSDเริ่มต้นจากรุ่น 10 ขึ้นไปจะเลิกGCCในความโปรดปรานของเสียงดังกราว / LLVM จากสิ่งที่ฉันได้เห็นรอบสุทธิเพื่อให้ห่างไกลเสียงดังกราว / LLVMเป็นโครงการที่มีความทะเยอทะยานอย่างเป็นธรรม แต่ในแง่ของความน่าเชื่อถือมันไม่สามารถจับคู่GCC มีเหตุผลทางเทคนิคใดบ้างFreeBSD กำลังเลือก LLVM เป็นโครงสร้างพื้นฐานคอมไพเลอร์ของพวกเขาหรือไม่หรือว่าเรื่องทั้งหมดจะถูกนำไปใช้กับ GNU / GPL เทียบกับใบอนุญาต BSD นิรันดร์หรือไม่? คำถามนี้มีข้อมูลที่เกี่ยวข้องเกี่ยวกับการใช้GCCในFreeBSD
241 freebsd  compiling  gcc  c  llvm 

4
วิธีรวบรวมคอมไพเลอร์ C ตั้งแต่เริ่มต้นจากนั้นคอมไพล์ Unix / Linux จากศูนย์
สมมติว่าฉันทำงานให้กับองค์กรบริการขนาดใหญ่นอกสหรัฐอเมริกา / สหราชอาณาจักร เราใช้เซิร์ฟเวอร์ UNIX และ Linux อย่างกว้างขวาง การอ่านบทความนี้ระบุว่าเป็นการง่ายที่จะแทรกแบ็คดอร์ในคอมไพเลอร์ C จากนั้นโค้ดใด ๆ ที่คอมไพล์ด้วยคอมไพเลอร์นั้นจะมีแบ็คดอร์ จากการรั่วไหลเมื่อเร็ว ๆ นี้เกี่ยวกับคำสั่งของ NSA / GCHQ ที่จะทำให้แบ็คดอร์ / จุดอ่อนในวิธีการเข้ารหัสฮาร์ดแวร์และซอฟต์แวร์ทั้งหมดคอมไพเลอร์กลายเป็นจุดสำคัญของความล้มเหลว ศักยภาพการกระจาย UNIX / Linix มาตรฐานทั้งหมดอาจถูกบุกรุก เราไม่สามารถที่จะมีระบบข้อมูลและข้อมูลลูกค้าของเราที่ถูกโจมตีโดยรัฐบาลโกง รับข้อมูลนี้ฉันต้องการสร้างคอมไพเลอร์ที่เชื่อถือได้ตั้งแต่เริ่มต้นแล้วฉันมีฐานที่ปลอดภัยในการสร้างดังนั้นฉันจึงสามารถสร้างระบบปฏิบัติการและแอปพลิเคชันจากซอร์สโค้ดโดยใช้คอมไพเลอร์นั้น คำถาม อะไรคือวิธีที่ถูกต้อง (และปลอดภัย) ในการรวบรวมคอมไพเลอร์จากซอร์สโค้ด (สถานการณ์ไก่ไข่ที่ดูเหมือน) แล้วรวบรวมการแจกจ่าย Unix / Linux ที่เชื่อถือได้ตั้งแต่เริ่มต้น? คุณสามารถสันนิษฐานได้ว่าฉันหรือผู้อื่นมีความสามารถในการอ่านและทำความเข้าใจซอร์สโค้ดสำหรับข้อบกพร่องด้านความปลอดภัยดังนั้นซอร์สโค้ดจะถูกตรวจสอบก่อนรวบรวม สิ่งที่ฉันเป็นจริงหลังจากนั้นเป็นแนวทางในการทำงานเพื่อสร้างคอมไพเลอร์นี้จากศูนย์อย่างปลอดภัยและสามารถใช้ในการรวบรวมเคอร์เนลส่วนอื่น ๆ ของระบบปฏิบัติการและแอปพลิเคชัน สแต็กการรักษาความปลอดภัยจะต้องเริ่มต้นที่ระดับฐานหากเรามั่นใจในระบบปฏิบัติการหรือแอพพลิเคชั่นที่ทำงานบนสแต็กนั้น ใช่ฉันเข้าใจว่าอาจมีฮาร์ดแวร์ด้านหลังซึ่งอาจแทรกไมโครโค้ดบางส่วนลงในคอมไพเลอร์เมื่อสร้างขึ้น ไม่มากที่เราสามารถทำได้เกี่ยวกับเรื่องนี้ในขณะนั้นยกเว้นอาจใช้ชิปที่ไม่ได้ออกแบบในสหรัฐอเมริกา มาจัดเรียงเลเยอร์นี้เพื่อเริ่มต้นและสมมติว่าฉันสามารถสร้างมันบนคอมพิวเตอร์เครื่องเก่าก่อนที่จะแทรกแบ็คดอร์ใดก็ได้ ดังที่บรูชชไนเออร์พูดว่า: "สำหรับวิศวกรฉันพูดแบบนี้: เราสร้างอินเทอร์เน็ตและพวกเราบางคนช่วยในการล้มล้างตอนนี้พวกเราที่รักเสรีภาพต้องแก้ไขมัน" …

1
Makefile นี้ทำให้โปรแกรม C โดยไม่ต้องระบุคอมไพเลอร์ได้อย่างไร
ผมก็ใช้ Makefile จากหนังสือ " การเขียนโปรแกรมขั้นสูงลินุกซ์ (2001)" [code] มันแปลกสำหรับฉันที่เห็นว่าGNU make ทำการคอมไพล์โค้ดอย่างถูกต้องโดยไม่ต้องระบุคอมไพเลอร์ใน Makefile มันเหมือนการอบไม่มีสูตรใด ๆ ! นี่เป็นรหัสขั้นต่ำ: test.c int main(){} Makefile all: test และทำให้ได้ผลจริง ๆ ! นี่คือคำสั่งที่รัน: cc test.c -o test ฉันไม่พบสิ่งที่มีประโยชน์ในเอกสาร เป็นไปได้อย่างไร? PS หมายเหตุเพิ่มเติมหนึ่ง: แม้ภาษาจะไม่ได้ระบุ; เพราะtest.cใช้ได้ GNU ใช้make ccหากมีอยู่test.cppหรือtest.cc(เมื่อไม่มีtest.c) ก็ใช้g++(และไม่c++)
41 linux  make  gcc  gnu-make 

4
configure: ข้อผิดพลาด: คอมไพเลอร์ C ไม่สามารถสร้างไฟล์เรียกทำงานได้
ฉันพยายามอัปเกรด apache 2.2.15 เป็น 2.2.27 ในขณะที่ใช้งาน config.nice นำมาจาก apache2.2.15 / บิลด์ฉันได้รับข้อผิดพลาดดังต่อไปนี้: checking whether the C compiler works... no configure: error: in `/home/vkuser/httpd-2.2.27/srclib/apr': configure: error: C compiler cannot create executables ฉันพยายามค้นหาทางออนไลน์ แต่ไม่มีโชค ฉันได้ทดสอบคอมไพเลอร์ c ด้วยการรันสคริปต์ test.c ขนาดเล็กและทำงานได้ดี มีวิธีแก้ปัญหาเล็กน้อยที่ให้ทางออนไลน์เช่นการติดตั้งแพคเกจ 'kernel-devel' แต่ไม่ได้แก้ปัญหา ฉันจะทำให้เรื่องนี้ทำงานได้อย่างไร ต่อไปนี้เป็น config.log สร้างขึ้น: This file contains any messages produced by …

1
ใช้เวลารวบรวม gcc 7.3.0 นานเท่าไหร่? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดเมื่อปีที่แล้ว จนถึงตอนนี้มันทำงานมาแล้วประมาณ 4 ชั่วโมง สิ่งหนึ่งที่ควรทราบคือฉันไม่ได้มีข้อกำหนดเบื้องต้นและต้องดาวน์โหลดแม้ว่า contrib / download_prerequisites ไม่แน่ใจว่าจะเพิ่มในเวลารวบรวมหรือไม่ รายละเอียดเครื่องระบุไว้ด้านล่าง: 4 CPUs Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz uname -a Linux <name> 3.10.0-693.17.1.el7.x86_64 #1 SMP Thu Jan 25 13:49:55 PST 2018 x86_64 x86_64 x86_64 GNU/Linux free -m total used free shared buff/cache available Mem: …
25 gcc 

4
ความสัมพันธ์ระหว่าง cc1 และ gcc?
ฉันพยายามที่จะติดตั้งทับทิมในไดเรกทอรีบ้านของฉันบนเซิร์ฟเวอร์ลินุกซ์ (โดยไม่ต้องเข้าถึงราก) gccซึ่งแน่นอนว่าต้องใช้ สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถหาได้คือไดเรคทอรี่ด้วยชื่อที่ (ถ้าคุณลึกพอ) ประกอบด้วยcc1: >: find / -iname gcc 2> /dev/null /usr/libexec/gcc >: tree -if /usr/libexec/gcc /usr/libexec/gcc /usr/libexec/gcc/x86_64-redhat-linux /usr/libexec/gcc/x86_64-redhat-linux/4.1.1 /usr/libexec/gcc/x86_64-redhat-linux/4.1.1/cc1 /usr/libexec/gcc/x86_64-redhat-linux/4.1.2 -> 4.1.1 ความจริงที่ว่าการเปลี่ยนเส้นทาง CC1 เพื่อ GCC ในวิกิพีเดียดูเหมือนจะบ่งบอกอะไรบางอย่างที่ใกล้เคียงกับตัวตน แต่ไม่มีการพูดถึงคนอื่น ๆ ของ CC1 บนหน้า GCC นอกจากหมายเหตุเกี่ยวกับการเปลี่ยนเส้นทางและ Googling ไม่ได้อากาศผมอะไรที่เป็นประโยชน์และความพยายามของฉันกับการใช้งานcc1ใน สถานที่ของgccมีการล้มเหลว ความสัมพันธ์ระหว่างพวกเขาคืออะไรกันแน่? และมันทำให้ฉันมีความหวังในการรวบรวมทับทิมบนเครื่องนี้หรือไม่?
23 gcc 

4
วิธีการติดตั้ง GCC 5 บนเดเบียนเจสซี 8.1
ฉันลองวิธีแก้ไขปัญหามากมายเพื่อติดตั้งอัปเดตสำหรับคอมไพเลอร์ 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 ไม่ได้)
21 debian  gcc  c++  g++ 

6
การคอมไพล์ GNU / Linux ด้วยการเพิ่มประสิทธิภาพ -O3
ได้มีการกล่าวว่าการรวบรวมเครื่องมือ GNU และเคอร์เนล Linux พร้อม-O3ตัวเลือกการเพิ่มประสิทธิภาพ gcc จะสร้างข้อผิดพลาดที่แปลกและแปลกใหม่ จริงป้ะ? มีใครลองดูบ้างหรือว่ามันเป็นเรื่องหลอกลวง?

3
gcc ไม่สามารถเชื่อมโยงไปยัง pthread ได้หรือไม่
ฉันเพิ่งติดตั้ง XUbuntu 11.10 64 บิต แต่ฉันมีปัญหาในการรวบรวมตัวอย่าง pthread ที่ง่ายที่สุด นี่คือรหัสpthread_simple.c: #include <stdio.h> #include <pthread.h> main() { pthread_t f2_thread, f1_thread; void *f2(), *f1(); int i1,i2; i1 = 1; i2 = 2; pthread_create(&f1_thread,NULL,f1,&i1); pthread_create(&f2_thread,NULL,f2,&i2); pthread_join(f1_thread,NULL); pthread_join(f2_thread,NULL); } void *f1(int *x){ int i; i = *x; sleep(1); printf("f1: %d",i); pthread_exit(0); } void *f2(int *x){ …
17 c  libraries  gcc  xubuntu 

1
gcc รู้ได้อย่างไรว่าติดตั้งบูสเตอร์ไว้ที่ใด
ฉันติดตั้งบูสต์บูสต์โดยใช้sudo apt-get installบน Ubuntu ต่อมาฉันไม่จำเป็นต้องให้ gcc Iธงพร้อมกับเส้นทางไปยังห้องสมุดเพิ่มเพื่อใช้เพิ่ม! ฉันไม่ทำอะไรpkg-config --cflags --libsเลย ความลึกลับที่นี่คืออะไร? gcc จะรู้ได้อย่างไรว่าบูสต์อยู่ที่ไหนและมันเชื่อมโยงกับมันอย่างไรโดยอัตโนมัติ?
13 gcc  libraries  boost 

3
ค้นหาและติดตั้งไฟล์ man ด้วยตนเอง
ฉันดูเหมือนจะหายไปบางหน้าคนสะดุดตา gcc และ g ++ ไม่ช่วยให้ฉันระบุส่วน whereisไม่แสดงรายการหน้าคนสำหรับสองหน้าดังนั้นฉันคิดว่าพวกเขาไม่ได้อยู่ที่นั่น ด้วย Google ฉันได้รับมากเช่น: http://linux.die.net/man/1/g++ (ดูเหมือนว่าจะเป็น HTML ธรรมดาแม้ว่า ... หรือเป็นมาร์กอัปหน้าเว็บหรือไม่) ฉันคิดว่านี่จะเป็นโอกาสที่ดีในการเรียนรู้วิธีแทนที่พวกเขาด้วยตนเอง ฉันเดาว่าฉันกำลังมองหาไฟล์ gcc.1.gz อยู่หรือ? ฉันจะได้มันมาจาก GNU จาก Debian หรือมันจะเป็นไปโดยอัตโนมัติได้ไหม? ใส่เข้าไปในไฟล์เหล่านั้นได้มากแค่ไหน - ถ้าฉันได้ไฟล์มามันน่าจะถูกต้อง 99% หรือว่ามันแตกต่างกันมากกับเวลา / สถาปัตยกรรม?
13 debian  man  gcc  roff 

1
Linux, GNU GCC, ld, สคริปต์เวอร์ชันและรูปแบบไบนารีของ ELF - มันทำงานอย่างไร
ฉันพยายามเรียนรู้เพิ่มเติมเกี่ยวกับการกำหนดเวอร์ชันของไลบรารีใน Linux และวิธีการทำให้ทุกอย่างทำงานได้ นี่คือบริบท: - ฉันมีสองรุ่นของห้องสมุดแบบไดนามิกซึ่งเผยให้เห็นชุดเดียวกันของอินเตอร์เฟซพูดและlibsome1.solibsome2.so - libsome1.soโปรแกรมที่มีการเชื่อมโยงกับ - โปรแกรมนี้จะใช้ในการโหลดแบบไดนามิกโมดูลอื่นพูดlibdl.solibmagic.so - ตอนนี้มีการเชื่อมโยงกับlibmagic.so libsome2.soเห็นได้ชัดโดยไม่ต้องใช้สคริปต์ลิงเกอร์สัญลักษณ์ซ่อนตัวอยู่ในlibmagic.soที่เวลาทำงานทุกสายอินเตอร์เฟซในการได้รับการแก้ไขไปlibsome2.so libsome1.soนี้ได้รับการยืนยันโดยการตรวจสอบค่าส่งกลับโดยเทียบกับมูลค่าของแมโครlibVersion()LIB_VERSION - ดังนั้นฉันลองถัดไปเพื่อคอมไพล์และเชื่อมโยงlibmagic.soกับสคริปต์ linker ซึ่งซ่อนสัญลักษณ์ทั้งหมดยกเว้น 3 ซึ่งกำหนดไว้ในlibmagic.soและถูกส่งออกโดยมัน ใช้งานได้ ... หรืออย่างน้อยที่สุดlibVersion()และLIB_VERSIONค่าตรงกัน (และรายงานรุ่น 2 ไม่ใช่ 1) - อย่างไรก็ตามเมื่อโครงสร้างข้อมูลบางอย่างต่อเนื่องเป็นดิสก์ฉันสังเกตเห็นความเสียหายบางอย่าง ในไดเรกทอรีของแอปพลิเคชันหากฉันลบlibsome1.soและสร้างลิงค์ซอฟต์ลิสต์ในตำแหน่งที่จะชี้ไปlibsome2.soทุกอย่างทำงานได้ตามที่คาดหวังและความเสียหายเดียวกันจะไม่เกิดขึ้น ฉันอดไม่ได้ที่จะคิดว่าสิ่งนี้อาจเกิดขึ้นเนื่องจากความขัดแย้งในการแก้ปัญหาสัญลักษณ์ของลิงเกอร์ ฉันได้ลองหลายสิ่งหลายอย่างเช่นพยายามเชื่อมโยงlibsome2.soเพื่อให้สัญลักษณ์ทั้งหมดเป็นสัญลักษณ์symbol@@VER_2(ซึ่งฉันยังสับสนอยู่เพราะคำสั่งnm -CD libsome2.soยังคงแสดงสัญลักษณ์เป็นsymbolและไม่ใช่symbol@@VER_2) ... ดูเหมือนจะไม่มีอะไรทำงาน !!! ช่วยด้วย!!!!!!

5
ติดตั้ง gcc ล่าสุดบน rhel 6 x86_64
ฉันมีเซิร์ฟเวอร์ RHEL 6 พร้อม gcc รุ่น 4.4.7 ฉันต้องการอัปเดตเวอร์ชัน gcc (ฉันคิดว่ารุ่นปัจจุบันคือ 4.8) การอัปเดตยำไม่ทำงาน นอกจากนี้ดังนั้นคำตอบสำหรับคำถามที่คล้ายกันใน CentOSไม่ทำงาน ฉันปฏิบัติตามวิธีการในคำตอบที่ยอมรับผลลัพธ์คือ "ข้อผิดพลาดในการรับข้อมูลที่เก็บสำหรับการทดสอบ -1.1-devtools-6 ไม่พบที่เก็บ" นอกจากนี้ฉันไม่แน่ใจว่าฉันควรทำตามวิธีการสำหรับ CentO หรือไม่ มีใครอัปเดต gcc ในเซิร์ฟเวอร์ RHEL 6 x86_64 หรือไม่

2
อะไรที่ทำให้ fs: [0x28] (กองนกขมิ้น)?
จากโพสต์นี้จะแสดงให้เห็นว่าFS:[0x28]เป็นนกขมิ้น ฉันกำลังสร้างรหัสเดียวกันโดยใช้ GCC ในฟังก์ชั่นนี้ void foo () { char a[500] = {}; printf("%s", a); } โดยเฉพาะฉันได้รับการชุมนุมครั้งนี้ .. 0x000006b5 64488b042528. mov rax, qword fs:[0x28] ; [0x28:8]=0x1978 ; '(' ; "x\x19" 0x000006be 488945f8 mov qword [local_8h], rax ...stuff... 0x00000700 488b45f8 mov rax, qword [local_8h] 0x00000704 644833042528. xor rax, qword fs:[0x28] 0x0000070d 7405 …
13 linux  security  gcc  stack 

2
ทำไม gcc แสดง `ไม่รู้จัก 'ในเป้าหมาย: x86_64-unknown-linux-gnu ใน Arch Linux
ฉันอยากรู้ว่าทำไมเมื่อฉันทำงานgcc -vภายใต้ Arch Linux มันจะแสดงunknownคำในผลลัพธ์เหล่านี้: Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/5.1.0/lto-wrapper Target: x86_64-unknown-linux-gnu ในขณะที่ distro อื่น ๆ เช่น ubuntu จะแสดงชื่อ distro เช่นubuntu: Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-ubuntu-linux-gnu/5.1.0/lto-wrapper Target: x86_64-ubuntu-linux-gnu
12 linux  arch-linux  gcc 

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