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

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

8
วัตถุประสงค์ของการใช้ -pedantic ในคอมไพเลอร์ GCC / G ++ คืออะไร?
หมายเหตุนี้ระบุว่า: -ansi: บอกให้คอมไพเลอร์ใช้ตัวเลือกภาษา ANSI สิ่งนี้จะปิด "คุณลักษณะ" บางอย่างของ GCC ซึ่งเข้ากันไม่ได้กับมาตรฐาน ANSI -pedantic: ใช้ร่วมกับ-ansiสิ่งนี้บอกให้คอมไพลเลอร์ปฏิบัติตามมาตรฐาน ANSI อย่างเคร่งครัดโดยปฏิเสธรหัสใด ๆ ที่ไม่เป็นไปตามข้อกำหนด สิ่งแรกแรก: วัตถุประสงค์ของการคืออะไร-pedanticและ-ansiตัวเลือกของคอมไพเลอร์ GCC / G ++ (ผมไม่เข้าใจคำอธิบายข้างต้น)? ใครช่วยบอกฉันถึงสถานการณ์ที่เหมาะสมในการใช้สองตัวเลือกนี้ ฉันควรใช้เมื่อใด มีความสำคัญหรือไม่?
140 c++  c  gcc  g++ 

11
การใช้คอมไพเลอร์ C ที่ล้าสมัยนั้นมีความเสี่ยงด้านความปลอดภัยหรือไม่?
เรามีระบบสร้างในการผลิตที่ไม่มีใครใส่ใจและเครื่องจักรเหล่านี้ใช้ GCC รุ่นโบราณเช่น GCC 3 หรือ GCC 2 และฉันไม่สามารถโน้มน้าวฝ่ายบริหารให้อัปเกรดเป็นรุ่นล่าสุดได้: พวกเขาพูดว่า "หากยังไม่พังไม่ต้องแก้ไข" เนื่องจากเรารักษาฐานรหัสเก่ามาก (เขียนในยุค 80) รหัส C89 นี้จึงรวบรวมได้ดีกับคอมไพเลอร์เหล่านี้ แต่ฉันไม่แน่ใจว่าควรใช้สิ่งเก่า ๆ เหล่านี้หรือไม่ คำถามของฉันคือ: การใช้คอมไพเลอร์ C ตัวเก่าสามารถลดความปลอดภัยของโปรแกรมที่คอมไพล์ได้ไหม UPDATE: รหัสเดียวกันนี้สร้างขึ้นโดย Visual Studio 2008 สำหรับเป้าหมาย Windows และ MSVC ยังไม่รองรับ C99 หรือ C11 (ฉันไม่ทราบว่า MSVC รุ่นใหม่ทำ) และฉันสามารถสร้างมันบนกล่อง Linux โดยใช้ GCC ล่าสุด ดังนั้นหากเราเพิ่งจะลดลงใน GCC รุ่นใหม่มันอาจจะสร้างได้ดีเหมือนเดิม
139 c  security  gcc 

1
ชงติดตั้ง gcc ใช้เวลานานเกินไป
ฉันกำลังติดตั้ง Mavericks ใหม่ทั้งหมดและตั้งใจทำ brew install gcc ซึ่งใช้เวลากว่าครึ่งชั่วโมงอาจมากกว่า ฉันควรจะยกเลิกหรือไม่ ตอนนี้ฉันรู้แล้วว่าฉันควรจะติดตั้ง gcc เฉพาะเจาะจง (อาจ gcc48) แต่มันสายเกินไปและอากาศ macbook ของฉันหายใจลำบาก ทำการดาวน์โหลดการอ้างอิงทั้ง 5 รายการเรียบร้อยแล้ว แต่ติดอยู่ในส่วน "การติดตั้ง gcc" จะดาวน์โหลด gcc-4.9.1.tar.bz2 กำหนดค่าและสร้างมันขึ้นมาและติดอยู่กับการทำ bootstrap คำแนะนำใด ๆ ที่ชื่นชม นี่เป็นคำแนะนำที่ดีที่ฉันเห็นช้าเกินไป: /apple/38222/how-do-i-install-gcc-via-homebrew ถามที่นี่ก่อน: /superuser/788256/brew-install-gcc-mac-os-10-9-mavericks
139 gcc  homebrew 


3
LLVM เทียบกับเสียงดังบน OS X
ฉันมีคำถามเกี่ยวกับ llvm, clang และ gcc บน OS X ความแตกต่างระหว่าง llvm-gcc 4.2, llvm 2.0 และ clang คืออะไร? ฉันรู้ว่าพวกเขาทั้งหมดสร้างขึ้นจาก llvm แต่มันแตกต่างกันอย่างไร? นอกจากคอมไพล์ได้เร็วขึ้นแล้ว llvm มีข้อดีกว่า gcc อย่างไร?
136 c++  c  gcc  llvm  clang 

19
/usr/lib/libstdc++.so.6: ไม่พบเวอร์ชัน `` GLIBCXX_3.4.15 '
ฉันจะรับ GLIBCXX_3.4.15 ใน Ubuntu ได้อย่างไร ฉันไม่สามารถเรียกใช้บางโปรแกรมที่ฉันกำลังรวบรวมได้ เมื่อฉันทำ: strings /usr/lib/libstdc++.so.6 | grep GLIBC ฉันเข้าใจ: GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBC_2.2.5 GLIBC_2.3 GLIBC_2.4 GLIBC_2.3.4 GLIBC_2.3.2 GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH ขอบคุณสำหรับความช่วยเหลือ!
135 c++  gcc  libstdc++ 

3
ข้อผิดพลาด GCC ที่เป็นไปได้เมื่อส่งคืน struct จากฟังก์ชัน
ฉันเชื่อว่าฉันพบข้อผิดพลาดใน GCC ในขณะที่ใช้ PCG PRNG ของ O'Neill ( รหัสเริ่มต้นในคอมไพเลอร์ Explorer ของ Godbolt ) หลังจากการคูณoldstateด้วยMULTIPLIER(ผลลัพธ์ที่เก็บไว้ใน rdi) GCC จะไม่เพิ่มผลลัพธ์INCREMENTนั้นย้ายINCREMENTไปยัง rdx แทนซึ่งจะถูกใช้เป็นค่าส่งคืนของ rand32_ret.state ตัวอย่างที่ทำซ้ำได้ขั้นต่ำ ( Compiler Explorer ): #include <stdint.h> struct retstruct { uint32_t a; uint64_t b; }; struct retstruct fn(uint64_t input) { struct retstruct ret; ret.a = 0; ret.b = input * …
133 c  gcc  assembly  x86-64  compiler-bug 

2
การบอก gcc โดยตรงเพื่อเชื่อมโยงไลบรารีแบบคงที่
รู้สึกแปลกสำหรับฉันที่จะใช้-Wl,-Bstaticเพื่อบอกว่าgccฉันต้องการเชื่อมโยงกับไลบรารีใดแบบคงที่ ท้ายที่สุดฉันบอกgccข้อมูลอื่น ๆ โดยตรงเกี่ยวกับการเชื่อมโยงกับไลบรารี ( -Ldir, -llibname) เป็นไปได้หรือไม่ที่จะบอกไดรเวอร์ gcc โดยตรงว่าควรเชื่อมโยงไลบรารีใดแบบคงที่ คำชี้แจง:ฉันรู้ว่าหากห้องสมุดบางแห่งมีอยู่ในเวอร์ชันคงที่เท่านั้นมันจะใช้โดยไม่มี-Wl,-Bstaticแต่ฉันต้องการบอกเป็นนัยว่าgccชอบไลบรารีแบบคงที่ ฉันรู้ด้วยว่าการระบุไฟล์ไลบรารีโดยตรงจะเชื่อมโยงกับมัน แต่ฉันชอบที่จะให้ความหมายรวมถึงไลบรารีแบบคงที่และไดนามิกเหมือนกัน

1
อะไรคือความแตกต่างระหว่าง -std = c ++ 11 และ -std = gnu ++ 11?
อะไรคือความแตกต่างระหว่าง-std=c++11และ-std=gnu++11เป็นพารามิเตอร์การคอมไพล์สำหรับ gcc และ clang? คำถามเดียวกันกับc99และgnu99? ฉันรู้เกี่ยวกับมาตรฐาน C ++ และ C มันคือความแตกต่างของพารามิเตอร์ที่ฉันสนใจ ฉันได้อ่านบางแห่งที่เกี่ยวข้องกับส่วนขยายบางอย่าง แต่ไม่ชัดเจนสำหรับฉันว่าส่วนขยายใดและจะเลือกระหว่างอันใดอันหนึ่งสำหรับโปรเจ็กต์ใหม่
132 c++  gcc  c++11  clang 

3
เหตุใดการวนซ้ำแบบง่ายจึงได้รับการปรับให้เหมาะสมเมื่อขีด จำกัด คือ 959 แต่ไม่ใช่ 960
พิจารณาลูปง่ายๆนี้: float f(float x[]) { float p = 1.0; for (int i = 0; i < 959; i++) p += 1; return p; } หากคุณคอมไพล์ด้วย gcc 7 (snapshot) หรือ clang (trunk) ด้วย-march=core-avx2 -Ofastคุณจะได้สิ่งที่คล้ายกับ. .LCPI0_0: .long 1148190720 # float 960 f: # @f vmovss xmm0, dword ptr [rip + .LCPI0_0] # …
131 c  gcc  optimization  clang 

4
GCC เริ่มต้นรวมไดเร็กทอรีอะไรบ้าง
เมื่อฉันรวบรวมไฟล์ต้นฉบับที่เรียบง่ายด้วย gcc ฉันไม่ต้องระบุพา ธ ไปยังไฟล์รวมมาตรฐานเช่น stdio หรือ stdlib GCC รู้วิธีค้นหาไฟล์เหล่านี้ได้อย่างไร มี/usr/includeเส้นทางเดินสายอยู่ภายในหรือไม่หรือจะได้รับเส้นทางจากส่วนประกอบระบบปฏิบัติการอื่น ๆ
131 c++  c  linux  gcc  include-path 

5
ฉันจะสร้าง makefile อย่างง่ายสำหรับ gcc บน Linux ได้อย่างไร
ฉันมีสามไฟล์: program.c, และprogram.hheaders.h program.cรวมถึงและprogram.hheaders.h ฉันต้องการคอมไพล์ไฟล์นี้บน Linux โดยใช้gcc compiler ฉันไม่แน่ใจว่าจะทำอย่างไร Netbeans สร้างขึ้นมาสำหรับฉัน แต่มันว่างเปล่า
130 c  gcc  makefile 

6
ทำไมจำนวนเต็มล้นใน x86 กับ GCC ทำให้เกิดการวนซ้ำไม่สิ้นสุด?
รหัสต่อไปนี้จะเข้าสู่วงวนไม่สิ้นสุดบน GCC: #include <iostream> using namespace std; int main(){ int i = 0x10000000; int c = 0; do{ c++; i += i; cout << i << endl; }while (i > 0); cout << c << endl; return 0; } ดังนั้นนี่คือข้อตกลง: การล้นจำนวนเต็มที่ลงนามคือพฤติกรรมที่ไม่ได้กำหนดทางเทคนิค แต่ GCC บน x86 ใช้เลขคณิตจำนวนเต็มโดยใช้คำแนะนำจำนวนเต็ม x86 - ซึ่งตัดกับโอเวอร์โฟลว์ ดังนั้นฉันคาดหวังว่ามันจะห่อหุ้มด้วยน้ำล้น …
129 c++  c  gcc  x86  undefined-behavior 

6
วิธีรวบรวมไบนารี 32 บิตบนเครื่อง linux 64 บิตด้วย gcc / cmake
มันเป็นไปได้ที่จะรวบรวมโครงการใน32 บิตด้วยcmakeและgccใน64 บิตระบบ? มันอาจจะเป็น แต่ฉันจะทำอย่างไร? เมื่อฉันพยายามมันว่า "โง่เขลา" วิธีโดยไม่ต้องตั้งค่าพารามิเตอร์ใด ๆ / ธง / etc เพียงการตั้งค่าLD_LIBRARY_PATHเพื่อหาห้องสมุดเชื่อมโยงใน~/tools/libมันก็ดูเหมือนจะไม่สนใจมันและมีเพียงมองในไดเรกทอรีย่อยชื่อlib64
129 linux  gcc  64-bit  cmake  32-bit 

3
หัวข้อ mingw-w64: posix vs win32
ฉันกำลังติดตั้ง mingw-w64 บน Windows และมีสองตัวเลือก: เธรด win32 และเธรด posix ฉันรู้ว่าอะไรคือความแตกต่างระหว่างเธรด win32 และ pthreads แต่ฉันไม่เข้าใจว่าความแตกต่างระหว่างสองตัวเลือกนี้คืออะไร ฉันสงสัยว่าถ้าฉันจะเลือกเธรด posix มันจะป้องกันไม่ให้ฉันเรียกใช้ฟังก์ชัน WinAPI เช่น CreateThread ดูเหมือนว่าตัวเลือกนี้จะระบุว่าโปรแกรมหรือไลบรารีของเธรดใดจะถูกใช้ แต่โดยอะไร โดย GCC, libstdc ++ หรืออย่างอื่น? ฉันพบสิ่งนี้: ความแตกต่างระหว่าง thread_posixs และ thread_win32 ในพอร์ต gcc ของ windows คืออะไร? กล่าวโดยย่อสำหรับ mingw เวอร์ชันนี้ threads-posix release จะใช้ posix API และอนุญาตให้ใช้ std :: thread และ …
129 windows  gcc  pthreads  mingw 

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