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

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

2
ข้อผิดพลาดของคอมไพเลอร์: memset ไม่ได้รับการประกาศในขอบเขตนี้
ฉันพยายามรวบรวมโปรแกรม C ของฉันใน Ubuntu 9.10 (gcc 4.4.1) ฉันได้รับข้อผิดพลาดนี้: Rect.cpp:344: error: ‘memset’ was not declared in this scope แต่ปัญหาคือฉันได้รวมไว้ในไฟล์ cpp แล้ว: #include <stdio.h> #include <stdlib.h> และโปรแกรมเดียวกันรวบรวมได้ดีภายใต้ Ubuntu 8.04 (gcc 4.2.4) ช่วยบอกฉันทีว่าฉันขาดอะไรไป
101 c++  gcc 

9
ข้อผิดพลาดในการคอมไพล์:“ g ++: เกิดข้อผิดพลาดขณะพยายาม exec 'cc1plus': execvp: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว "
เมื่อฉันรวบรวมโปรแกรม C / C ++ ด้วยpopenในphp... ฉันได้รับข้อผิดพลาดนี้: g++: error trying to exec 'cc1plus': execvp: No such file or directory แต่ถ้าฉันเรียกใช้โค้ด php ในเชลล์ .. ก็ใช้ได้ดี .. ใน Arch Linux .. รหัส PHP: <?php function rfile($fp) { $out=""; while (!feof($fp)) { $out.= fgets($fp, 1024000); } return $out; } $p = popen('g++ -Wall …
100 php  c++  c  linux  gcc 

2
พารามิเตอร์ gcc "-fpic" และ "-fPIC" ต่างกันอย่างไร
ฉันอ่านgccmanpage แล้ว แต่ยังไม่เข้าใจความแตกต่างระหว่าง-fpicและ-fPIC. ใครช่วยอธิบายด้วยวิธีที่ง่ายและชัดเจน คำถามที่เกี่ยวข้อง: -fPIC หมายถึงอะไรเมื่อสร้างไลบรารีที่ใช้ร่วมกัน อะไรคือความหมายของการคอมไพล์อ็อบเจ็กต์ด้วยแฟล็ก gcc -fPIC หากใช้ในไฟล์ปฏิบัติการ
100 gcc  fpic 


7
คำเตือน C ++: การหารสองด้วยศูนย์
กรณีที่ 1: #include <iostream> int main() { double d = 15.50; std::cout<<(d/0.0)<<std::endl; } มันรวบรวมโดยไม่มีคำเตือนใด ๆ infและภาพพิมพ์ ตกลง C ++ สามารถจัดการการหารด้วยศูนย์ได้ ( ดูสด ) แต่, กรณีที่ 2: #include <iostream> int main() { double d = 15.50; std::cout<<(d/0)<<std::endl; } คอมไพเลอร์ให้คำเตือนต่อไปนี้ ( ดูสด ): warning: division by zero [-Wdiv-by-zero] std::cout<<(d/0)<<std::endl; เหตุใดคอมไพเลอร์จึงแจ้งเตือนในกรณีที่สอง คือ0 != …

4
ทดลอง :: ข้อผิดพลาดตัวเชื่อมโยงระบบไฟล์
ฉันพยายามใช้คุณสมบัติ c ++ 1z ใหม่ที่เป็นจริงในส่วนหัวของการพัฒนาภายใน gcc 6.0 ถ้าฉันลองตัวอย่างเล็กน้อยนี้: #include <iostream> #include <experimental/filesystem> namespace fs = std::experimental::filesystem; int main() { fs::path p1 = "/home/pete/checkit"; std::cout << "p1 = " << p1 << std::endl; } ฉันได้: / opt / linux-gnu_6-20151011 / bin / g ++ --std = c ++ 1z main.cpp -O2 …
98 c++  gcc  c++17 


1
การเริ่มต้นสมาชิกขณะใช้ตัวสร้างที่ได้รับมอบหมาย
ฉันได้เริ่มลองใช้มาตรฐาน C ++ 11 แล้วและฉันพบคำถามนี้ซึ่งอธิบายถึงวิธีการเรียก ctor ของคุณจาก ctor อื่นในคลาสเดียวกันเพื่อหลีกเลี่ยงการมีวิธีการเริ่มต้นหรือสิ่งที่คล้ายกัน ตอนนี้ฉันกำลังลองสิ่งเดียวกันกับรหัสที่มีลักษณะดังนี้: hpp: class Tokenizer { public: Tokenizer(); Tokenizer(std::stringstream *lines); virtual ~Tokenizer() {}; private: std::stringstream *lines; }; cpp: Tokenizer::Tokenizer() : expected('=') { } Tokenizer::Tokenizer(std::stringstream *lines) : Tokenizer(), lines(lines) { } แต่นี่ทำให้ฉันเกิดข้อผิดพลาด: In constructor ‘config::Tokenizer::Tokenizer(std::stringstream*)’: /path/Tokenizer.cpp:14:20: error: mem-initializer for ‘config::Tokenizer::lines’ follows constructor delegationฉันได้ลองย้ายส่วน …

8
จะเปลี่ยนคอมไพเลอร์ GCC เริ่มต้นใน Ubuntu ได้อย่างไร
ฉันติดตั้ง gcc-3.3 / g ++ - 3.3 บน ubuntu 11.04 ซึ่งมี gcc / g ++ - 4.4 อยู่แล้ว ดังนั้นในระบบของฉันจึงมีทั้ง gcc-3.3 และ 4.4 ฉันสามารถเรียกคอมไพเลอร์ทั้งสองได้ตามที่ฉันต้องการ ถ้าฉันแค่เรียกคำสั่งgccgcc-4.4 จะถูกเรียก ที่จะเรียก GCC-3.3 gcc-3.3ผมต้องใช้คำสั่ง ฉันจะเปลี่ยนคอมไพเลอร์เริ่มต้นเป็น gcc-3.3 ได้อย่างไร เมื่อฉันรันคำสั่งgccควรเรียกใช้ gcc-3.3 ไม่ใช่ gcc-4.4 นอกจากนี้ฉันจะเปลี่ยนตัวแปร CXX ในไฟล์ make เป็น gcc-3.3 ได้อย่างไร ฉันต้องการเปลี่ยนตำแหน่งส่วนกลางที่พบบ่อยในระบบแทนที่จะเปลี่ยนไฟล์ make ทั้งหมด
98 linux  ubuntu  gcc 

13
การยกเลิกการเชื่อมโยงผลลัพธ์ของ std :: type_info :: name
ฉันกำลังทำงานกับรหัสบันทึกบางอย่างที่ควรจะพิมพ์ข้อมูลเกี่ยวกับฟังก์ชันการโทร สิ่งนี้ควรจะค่อนข้างง่าย C ++ มาตรฐานมีtype_infoคลาส ซึ่งมีชื่อของ typeid'd class / function / etc แต่มันแหลกเหลว มันไม่มีประโยชน์มาก คือtypeid(std::vector<int>).name()ผลตอบแทนSt6vectorIiSaIiEE. มีวิธีการผลิตสิ่งที่เป็นประโยชน์จากสิ่งนี้หรือไม่? เช่นเดียวstd::vector<int>กับตัวอย่างข้างต้น หากใช้ได้เฉพาะกับคลาสที่ไม่ใช่เทมเพลตก็ใช้ได้เช่นกัน วิธีแก้ปัญหาควรใช้ได้กับ gcc แต่จะดีกว่าถ้าฉันสามารถพอร์ตได้ สำหรับการบันทึกจึงไม่สำคัญมากจนไม่สามารถปิดได้ แต่ควรมีประโยชน์สำหรับการดีบัก
97 c++  gcc  name-mangling 

7
วิธีรวบรวมโดยไม่มีคำเตือนถือว่าเป็นข้อผิดพลาด
ปัญหาคือโค้ดเดียวกันกับที่คอมไพล์บน Windows ไม่สามารถคอมไพล์บน Ubuntu ได้ ทุกครั้งที่ฉันได้รับข้อผิดพลาดนี้: cc1: warnings being treated as errors ตอนนี้มันเป็นฐานรหัสขนาดใหญ่และฉันไม่ชอบแก้ไขคำเตือนทั้งหมด มีวิธีใดบ้างที่ฉันสามารถรวบรวมได้สำเร็จทั้งๆที่มีคำเตือน

13
ฉันจะใช้“ sizeof” ในมาโครตัวประมวลผลล่วงหน้าได้อย่างไร
มีวิธีใดบ้างในการใช้sizeofมาโครตัวประมวลผลล่วงหน้า ตัวอย่างเช่นมีสถานการณ์มากมายในช่วงหลายปีที่ฉันต้องการทำสิ่งต่างๆเช่น: #if sizeof(someThing) != PAGE_SIZE #error Data structure doesn't match page size #endif สิ่งที่แน่นอนที่ฉันตรวจสอบที่นี่ถูกสร้างขึ้นอย่างสมบูรณ์ - ประเด็นคือฉันมักจะชอบใส่การตรวจสอบเวลาคอมไพล์ (ขนาดหรือการจัดตำแหน่ง) ประเภทนี้เพื่อป้องกันคนที่แก้ไขโครงสร้างข้อมูลซึ่งอาจไม่ตรงแนวหรือใหม่ ขนาดของสิ่งที่จะทำลายพวกเขา ไม่จำเป็นต้องพูด - ดูเหมือนว่าฉันจะไม่สามารถใช้ a sizeofในลักษณะที่อธิบายไว้ข้างต้นได้
96 c  gcc 

7
วิธีการตั้งค่า cron job เพื่อเรียกใช้งานปฏิบัติการทุกชั่วโมง?
ฉันต้องการตั้งค่างาน cron ที่เรียกใช้ไฟล์ปฏิบัติการที่คอมไพล์โดยใช้ gcc ทุกๆชั่วโมง ฉันล็อกอินด้วยรูทและพิมพ์ crontab -e จากนั้นฉันป้อนข้อมูลต่อไปนี้และบันทึกไฟล์ 0 * * * * /path_to_executable อย่างไรก็ตามงาน cron ไม่ทำงาน ฉันเห็นว่าเมื่อฉันพิมพ์/...path_to_executableฉันได้รับข้อผิดพลาดในการแบ่งกลุ่ม ฉันสามารถเรียกใช้งานไฟล์ปฏิบัติการได้จากโฟลเดอร์ที่อยู่ในโฟลเดอร์เท่านั้นมีวิธีใดบ้างที่ฉันสามารถแก้ปัญหานี้ได้
95 c  linux  gcc  cron  crontab 

9
คุณจะปิดการใช้งานคำเตือนตัวแปรที่ไม่ได้ใช้งานที่ออกมาจาก gcc ในรหัสของบุคคลที่สามได้อย่างไร?
ฉันต้องการทราบว่าสวิตช์ใดที่คุณส่งต่อไปยังคอมไพเลอร์ gcc เพื่อปิดคำเตือนตัวแปรที่ไม่ได้ใช้ ฉันได้รับข้อผิดพลาดจากการเพิ่มประสิทธิภาพบน windows และฉันไม่ต้องการแตะรหัสเพิ่ม: C:\boost_1_52_0/boost/system/error_code.hpp: At global scope: C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable] C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable] C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable] ฉันลองใช้ทั้งสองอย่าง-Wunused-valueและ-Wno-unused-valueไม่ได้ระงับข้อความข้างต้น คำสั่งที่ถูกต้องคืออะไรนี่คือบรรทัดคอมไพล์ของฉัน: g++ -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion -Wdisabled-optimization …


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