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

GCC คือ GNU Compiler Collection มันเป็นคอมไพเลอร์มาตรฐานอย่างแท้จริงสำหรับ C, C ++, Go, Fortran และ Ada บน Linux และรองรับภาษาและแพลตฟอร์มอื่น ๆ อีกมากมายเช่นกัน นอกเหนือจากคอมไพเลอร์ GCC ยังมี toolchain (libc, libstdc ++, objdump, nm ฯลฯ ) ที่ใช้กันอย่างแพร่หลายในหลายแพลตฟอร์มและระบบ


7
C / C ++ พร้อม GCC: เพิ่มไฟล์ทรัพยากรลงในไฟล์ปฏิบัติการ / ไลบรารีแบบคงที่
ใครมีความคิดที่จะรวบรวมไฟล์ทรัพยากรใด ๆ แบบคงที่ในไฟล์ปฏิบัติการหรือไฟล์ไลบรารีที่แชร์โดยใช้ GCC ตัวอย่างเช่นฉันต้องการเพิ่มไฟล์รูปภาพที่ไม่มีวันเปลี่ยนแปลง (และถ้าเป็นเช่นนั้นฉันก็ต้องแทนที่ไฟล์อยู่ดี) และไม่ต้องการให้พวกเขาอยู่ในระบบไฟล์ ถ้าเป็นไปได้ (และฉันคิดว่าเป็นเพราะ Visual C ++ สำหรับ Windows ก็ทำได้เช่นกัน) ฉันจะโหลดไฟล์ที่เก็บไว้ในไบนารีของตัวเองได้อย่างไร? ไฟล์ปฏิบัติการแยกวิเคราะห์ค้นหาไฟล์และดึงข้อมูลออกมาหรือไม่ อาจมีตัวเลือกสำหรับ GCC ที่ฉันยังไม่เคยเห็น การใช้เครื่องมือค้นหาไม่ได้คายสิ่งที่ถูกต้องออกไป ฉันต้องการสิ่งนี้เพื่อใช้กับไลบรารีที่ใช้ร่วมกันและไฟล์ปฏิบัติการ ELF ปกติ ขอความช่วยเหลือใด ๆ


5
การเชื่อมโยง libstdc ++ แบบคงที่: gotchas ใด ๆ ?
ฉันต้องการปรับใช้แอปพลิเคชัน C ++ ที่สร้างขึ้นบน Ubuntu 12.10 พร้อม libstdc ++ ของ GCC 4.7 กับระบบที่ใช้ Ubuntu 10.04 ซึ่งมาพร้อมกับ libstdc ++ เวอร์ชันเก่ากว่ามาก ขณะนี้ผมกำลังรวบรวมกับ-static-libstdc++ -static-libgccที่แนะนำโดยการโพสต์บล็อกนี้: การเชื่อมโยง libstdc ++ แบบคงที่ ผู้เขียนเตือนไม่ให้ใช้โค้ด C ++ ที่โหลดแบบไดนามิกเมื่อคอมไพล์ libstdc ++ แบบคงที่ซึ่งเป็นสิ่งที่ฉันยังไม่ได้ตรวจสอบ ถึงกระนั้นทุกอย่างดูเหมือนจะราบรื่นจนถึงตอนนี้: ฉันสามารถใช้ประโยชน์จากคุณสมบัติ C ++ 11 บน Ubuntu 10.04 ซึ่งเป็นสิ่งที่ฉันเป็นหลังจากนั้น ฉันทราบว่าบทความนี้มาจากปี 2548 และอาจมีการเปลี่ยนแปลงมากมายตั้งแต่นั้นมา คำแนะนำยังคงเป็นปัจจุบันหรือไม่? มีปัญหาที่น่าสงสัยที่ฉันควรระวังหรือไม่?

9
ฉันจะให้ Makefile สร้างซอร์สไฟล์ใหม่โดยอัตโนมัติที่มีไฟล์ส่วนหัวที่แก้ไขได้อย่างไร (ในภาษา C / C ++)
ฉันมี makefile ต่อไปนี้ที่ใช้สร้างโปรแกรม (จริงๆแล้วเคอร์เนล) ที่ฉันกำลังทำงาน ตั้งแต่เริ่มต้นและฉันกำลังเรียนรู้เกี่ยวกับกระบวนการดังนั้นมันจึงไม่สมบูรณ์แบบ แต่ฉันคิดว่ามันมีประสิทธิภาพเพียงพอสำหรับระดับประสบการณ์การเขียน makefiles AS = nasm CC = gcc LD = ld TARGET = core BUILD = build SOURCES = source INCLUDE = include ASM = assembly VPATH = $(SOURCES) CFLAGS = -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions \ -nostdinc -fno-builtin -I $(INCLUDE) ASFLAGS = -f …

5
ข้อผิดพลาดร้ายแรงของ GCC: stdio.h: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
ฉันพยายามรวบรวมโปรแกรมใน C บน OS X 10.9 ด้วย GCC 4.9 (ทดลอง) ด้วยเหตุผลบางประการฉันได้รับข้อผิดพลาดต่อไปนี้ในเวลาคอมไพล์: gcc: fatal error: stdio.h: No such file or directory จากนั้นฉันลองใช้โปรแกรม Hello World ง่ายๆ: #include <stdio.h> int main(int argc, const char *argv[]) { printf("Hello, world!"); return 0; } อีกครั้งเมื่อทำงานgcc -o ~/hello ~/hello.cฉันได้รับข้อผิดพลาดเดียวกัน ผมใช้รุ่นทดลองแต่ดูเหมือนว่าไม่น่าเชื่อว่าจะมีการเปิดตัวที่สร้างข้อผิดพลาดเมื่อนำเข้าgcc stdioอะไรอาจทำให้เกิดปัญหานี้และจะแก้ไขได้อย่างไร
92 c  gcc  stdio 

6
ส่วนหัวที่คอมไพล์ล่วงหน้าด้วย GCC
มีใครประสบความสำเร็จบ้างในการรับส่วนหัวที่คอมไพล์ไว้ล่วงหน้าที่ทำงานกับ GCC บ้าง? ฉันไม่มีโชคในความพยายามของฉันและฉันยังไม่เห็นตัวอย่างที่ดีมากมายสำหรับวิธีการตั้งค่า ฉันได้ลองใช้ cygwin gcc 3.4.4 และใช้ 4.0 บน Ubuntu

5
ความแตกต่างระหว่าง gcc -ggdb และ gcc -g คืออะไร
เมื่อฉันใช้ gcc เพื่อรวบรวมโปรแกรม C ฉันมักจะใช้-gเพื่อรับข้อมูลการดีบักลงในไฟล์ elf เพื่อให้ gdb สามารถช่วยฉันได้หากจำเป็น อย่างไรก็ตามฉันสังเกตเห็นว่าบางโปรแกรมใช้-ggdbเนื่องจากควรทำให้ข้อมูลดีบักเป็นมิตรกับ gdb มากขึ้น แตกต่างกันอย่างไรและแนะนำให้ใช้แบบไหน? หมายเหตุ:ลิงก์ไปยังตัวเลือกสำหรับการดีบักโปรแกรมของคุณหรือ GCC http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
91 gcc  gdb 

1
ความแตกต่างระหว่าง -rpath และ -L คืออะไร?
gccและldมีหลายวิธีในการระบุเส้นทางการค้นหาสำหรับไลบรารี - ระหว่างนั้น-rpathและ-Lแฟล็ก การจัดการไม่เปิดเผยความแตกต่างระหว่างแฟล็กทั้งสองนี้อย่างมีประสิทธิภาพโดยบอกว่าแต่ละแฟล็กจะเพิ่มไลบรารีไปยังพา ธ การค้นหาไลบรารี แต่ก็ดูแปลกที่ธงทั้งสองทำเหมือนกันทุกประการ อะไรคือความแตกต่างระหว่างสองตัวเลือกนี้?

3
<random> สร้างหมายเลขเดียวกันใน Linux แต่ไม่ใช่ใน Windows
รหัสด้านล่างนี้มีไว้เพื่อสร้างรายการตัวเลขสุ่มหลอกห้าหมายเลขในช่วงเวลา [1,100] ฉันเมล็ดdefault_random_engineด้วยtime(0)ซึ่งจะส่งกลับเวลาของระบบในเวลายูนิกซ์ เมื่อฉันรวบรวมและเรียกใช้โปรแกรมนี้บน Windows 7 โดยใช้ Microsoft Visual Studio 2013 มันทำงานได้ตามที่คาดไว้ (ดูด้านล่าง) อย่างไรก็ตามเมื่อฉันทำใน Arch Linux ด้วยคอมไพเลอร์ g ++ มันทำงานแปลก ๆ ใน Linux จะมีการสร้างตัวเลข 5 ตัวในแต่ละครั้ง ตัวเลข 4 ตัวสุดท้ายจะแตกต่างกันในแต่ละการดำเนินการ (ซึ่งมักจะเป็นเช่นนั้น) แต่ตัวเลขแรกจะยังคงเหมือนเดิม ตัวอย่างผลลัพธ์จากการดำเนินการ 5 ครั้งบน Windows และ Linux: | Windows: | Linux: --------------------------------------- Run 1 | 54,01,91,73,68 | 25,38,40,42,21 Run 2 …

7
การสร้าง OSX App Bundle
สมมติว่าฉันสร้างแอป osX โดยไม่ใช้ Xcode หลังจากคอมไพล์ด้วย GCC ฉันได้รับไฟล์ปฏิบัติการซึ่งเชื่อมโยงกับไลบรารีอื่น ๆ ไลบรารีบางส่วนอาจเชื่อมโยงแบบไดนามิกกับไลบรารีระบบอื่น ๆ ที่ไม่ได้มาตรฐาน มีเครื่องมือใดบ้างที่สร้าง OSX App Bundle โดยสร้างโครงสร้างไดเร็กทอรีที่ต้องการก่อนจากนั้นคัดลอก / ตรวจสอบ / แก้ไขลิงก์ซ้ำเพื่อให้แน่ใจว่าการอ้างอิงแบบไดนามิกทั้งหมดอยู่ใน App Bundle ด้วย ฉันเดาว่าฉันสามารถลองเขียนอะไรแบบนี้ได้ แต่ฉันสงสัยว่ามีอะไรแบบนี้อยู่แล้ว
90 macos  gcc  otool 

3
ฉันจะเพิ่มไอคอนลงในไฟล์ปฏิบัติการที่คอมไพล์ mingw-gcc ได้อย่างไร
ใน Windows โดยใช้ gcc ของ mingw มีการระบุหรือไม่ว่าไฟล์ exe ที่ส่งออกคือการใช้ไฟล์ไอคอนเพื่อให้ไฟล์ exe แสดงพร้อมกับไอคอนนั้นใน explorer
90 windows  gcc  icons  mingw 

4
การรวบรวมโค้ดมัลติเธรดด้วย g ++
ฉันมีรหัสที่ง่ายที่สุดที่เคยมีมา: #include &lt;iostream&gt; #include &lt;thread&gt; void worker() { std::cout &lt;&lt; "another thread"; } int main() { std::thread t(worker); std::cout &lt;&lt; "main thread" &lt;&lt; std::endl; t.join(); return 0; } แม้ว่าฉันจะยังไม่สามารถรวบรวมg++เพื่อเรียกใช้ รายละเอียดเพิ่มเติม: $ g++ --version g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the …
89 c++  linux  ubuntu  gcc  g++ 

4
คำจำกัดความของคำว่า "ระเหย" นี้มีความผันผวนหรือ GCC มีปัญหาการปฏิบัติตามมาตรฐานหรือไม่
ฉันต้องการฟังก์ชันที่ (เช่น SecureZeroMemory จาก WinAPI) หน่วยความจำเป็นศูนย์เสมอและไม่ได้รับการปรับให้เหมาะสมแม้ว่าคอมไพเลอร์จะคิดว่าหน่วยความจำนั้นจะไม่ถูกเข้าถึงอีกเลยหลังจากนั้น ดูเหมือนผู้สมัครที่สมบูรณ์แบบสำหรับความผันผวน แต่ฉันมีปัญหาบางอย่างในการทำให้ GCC ทำงานได้จริง นี่คือฟังก์ชั่นตัวอย่าง: void volatileZeroMemory(volatile void* ptr, unsigned long long size) { volatile unsigned char* bytePtr = (volatile unsigned char*)ptr; while (size--) { *bytePtr++ = 0; } } ง่ายพอ แต่รหัสที่ GCC สร้างขึ้นจริงถ้าคุณเรียกว่ามันแตกต่างกันอย่างมากกับเวอร์ชันคอมไพเลอร์และจำนวนไบต์ที่คุณพยายามเป็นศูนย์ https://godbolt.org/g/cMaQm2 GCC 4.4.7 และ 4.5.3 ไม่เคยเพิกเฉยต่อความผันผวน GCC 4.6.4 และ 4.7.3 …
89 c++  c  gcc  standards 

2
GCC: March ต่างจาก mtune อย่างไร?
ฉันพยายามขัดหน้า GCC man สำหรับสิ่งนี้ แต่ก็ยังไม่ได้รับจริงๆ อะไรคือความแตกต่างระหว่าง-marchและ-mtune? เมื่อใดที่ใช้เพียงแค่-marchเทียบกับทั้งสองอย่าง เป็นไปได้ไหมที่จะเพียง-mtune?

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