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

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

4
ฉันไม่เข้าใจ -Wl, -rpath -Wl
เพื่อความสะดวกฉันได้เพิ่ม manpages ที่เกี่ยวข้องด้านล่าง ความเข้าใจผิดของฉันก่อน: หากฉันต้องการแยกตัวเลือกด้วย,นั่นหมายความว่าตัวเลือกที่สอง-Wlไม่ใช่ตัวเลือกอื่นเพราะมันมาก่อน,ซึ่งหมายความว่ามันเป็นอาร์กิวเมนต์ของ-rpathตัวเลือก ฉันไม่เข้าใจว่า-rpathจะมี-Wl,.ข้อโต้แย้งได้อย่างไร! สิ่งที่จะทำให้รู้สึกในใจของฉันจะเป็นเช่นนี้: -Wl,-rpath . สิ่งนี้ควรเรียกใช้ตัวเลือก -rpath linker ด้วยอาร์กิวเมนต์ไดเรกทอรีปัจจุบัน ผู้ชาย gcc: -Wl ตัวเลือก ส่งตัวเลือกเป็นตัวเลือกไปยังลิงเกอร์ หากตัวเลือกมีเครื่องหมายจุลภาคมันจะแบ่งออกเป็นหลายตัวเลือกที่เครื่องหมายจุลภาค คุณสามารถใช้ไวยากรณ์นี้เพื่อส่งผ่านข้อโต้แย้งไปยังตัวเลือก ตัวอย่างเช่น-Wl,-Map,output.mapส่งผ่าน -Map output.mapไปยังลิงเกอร์ เมื่อใช้ตัวเชื่อมโยง GNU คุณสามารถได้รับผลกระทบเดียวกันกับ `-Wl, -Map = output.map ' ผู้ชาย ld: -rpath = dir เพิ่มไดเร็กทอรีไปยังพา ธ การค้นหาไลบรารีรันไทม์ สิ่งนี้ใช้เมื่อเชื่อมโยงเอลฟ์ที่ปฏิบัติการได้กับวัตถุที่แชร์ อาร์กิวเมนต์ -rpath ทั้งหมดถูกต่อกันและส่งผ่านไปยังตัวลิงก์รันไทม์ซึ่งใช้เพื่อระบุตำแหน่งอ็อบเจ็กต์ที่แบ่งใช้ขณะรันไทม์ ตัวเลือก -rpath ยังใช้เมื่อค้นหาออบเจ็กต์ที่แชร์ซึ่งต้องการโดยออบเจกต์ร่วมที่รวมอยู่ในลิงก์อย่างชัดเจน
245 gcc  ld  rpath 

7
เสียงดังก้องกับ GCC - ซึ่งสร้างไบนารีที่ดีกว่า? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ปัจจุบันฉันใช้ GCC แต่ฉันค้นพบ Clang เมื่อเร็ว ๆ นี้และฉันกำลังไตร่ตรองการสลับ มีปัจจัยหนึ่งในการตัดสินใจว่า - คุณภาพ (ความเร็ว, หน่วยความจำรอยเท้า, ความน่าเชื่อถือ) ของไบนารีที่สร้าง - หากgcc -O3สามารถสร้างไบนารีที่ทำงานได้เร็วขึ้น 1% หรือใช้หน่วยความจำน้อยลง 1% มันเป็นดีลเลอร์ดีล Clang มีความเร็วในการคอมไพล์ที่ดีขึ้นและการปล่อยหน่วยความจำเวลาคอมไพล์ที่ต่ำกว่า GCC แต่ฉันสนใจในการวัด / เปรียบเทียบผลของซอฟต์แวร์ที่คอมไพล์แล้ว - คุณช่วยชี้ให้ฉันเห็นหรือเล่าประสบการณ์ของคุณได้ไหม?

21
ฉันจะปิดเสียงเตือนเกี่ยวกับตัวแปรที่ไม่ได้ใช้ได้อย่างไร
ฉันมีแอพพลิเคชั่นข้ามแพลตฟอร์มและในบางฟังก์ชั่นของฉันไม่ได้ใช้ค่าทั้งหมดที่ส่งไปยังฟังก์ชั่น ดังนั้นฉันจึงได้รับคำเตือนจาก GCC บอกฉันว่ามีตัวแปรที่ไม่ได้ใช้ อะไรจะเป็นวิธีที่ดีที่สุดในการเขียนโปรแกรมเตือน #ifdef รอบฟังก์ชั่นหรือไม่ #ifdef _MSC_VER void ProcessOps::sendToExternalApp(QString sAppName, QString sImagePath, qreal qrLeft, qreal qrTop, qreal qrWidth, qreal qrHeight) #else void ProcessOps::sendToExternalApp(QString sAppName, QString sImagePath, qreal /*qrLeft*/, qreal /*qrTop*/, qreal /*qrWidth*/, qreal /*qrHeight*/) #endif { มันน่าเกลียดมาก แต่ดูเหมือนว่าวิธีที่คอมไพเลอร์จะชอบ หรือฉันจะกำหนดศูนย์ให้กับตัวแปรที่ส่วนท้ายของฟังก์ชั่น? (ซึ่งฉันเกลียดเพราะมันเปลี่ยนแปลงบางสิ่งบางอย่างในโฟลว์ของโปรแกรมเพื่อปิดเสียงเตือนคอมไพเลอร์) มีวิธีที่ถูกต้องหรือไม่?
237 c++  gcc  warnings  gcc-warning 

13
การลบอักขระบรรทัดใหม่ต่อท้ายจากอินพุต fgets ()
ฉันพยายามรับข้อมูลจากผู้ใช้และส่งไปยังฟังก์ชันอื่นในหน่วย gcc รหัสคืออะไรเช่นนี้ printf("Enter your Name: "); if (!(fgets(Name, sizeof Name, stdin) != NULL)) { fprintf(stderr, "Error reading Name.\n"); exit(1); } อย่างไรก็ตามฉันพบว่ามันมี\nตัวละครขึ้นบรรทัดใหม่ในตอนท้าย ดังนั้นถ้าฉันใส่มันจบลงด้วยการส่งJohn John\nฉันจะลบ\nและส่งสตริงที่เหมาะสมได้อย่างไร
236 c  string  gcc  newline  fgets 

1
std :: vector ถดถอยประสิทธิภาพเมื่อเปิดใช้งาน C ++ 11
ฉันพบการถดถอยของประสิทธิภาพที่น่าสนใจใน C ++ snippet ขนาดเล็กเมื่อฉันเปิดใช้ C ++ 11: #include <vector> struct Item { int a; int b; }; int main() { const std::size_t num_items = 10000000; std::vector<Item> container; container.reserve(num_items); for (std::size_t i = 0; i < num_items; ++i) { container.push_back(Item()); } return 0; } ด้วย g ++ (GCC) 4.8.2 20131219 …
235 c++  performance  gcc  c++11  vector 

13
Objective-C สำหรับ Windows
อะไรจะเป็นวิธีที่ดีที่สุดในการเขียน Objective-C บนแพลตฟอร์ม Windows Cygwin และ gcc? มีวิธีใดบ้างที่ฉันสามารถรวมเข้ากับ Visual Studio ได้ ในบรรทัดเหล่านั้น - มีคำแนะนำใด ๆ เกี่ยวกับวิธีการเชื่อมโยงและใช้ Windows SDK สำหรับสิ่งนี้ มันเป็นสัตว์ร้ายที่แตกต่างออกไป แต่ฉันรู้ว่าฉันสามารถเขียนชุดประกอบและลิงก์ใน Windows DLLs ได้ซึ่งทำให้ฉันสามารถเข้าถึงการโทรเหล่านั้นได้ แต่ฉันไม่รู้วิธีการทำเช่นนี้โดยไม่ต้องไปที่ Google มีใครทราบถึงแหล่งข้อมูลออนไลน์หรือหนังสือที่ดีที่จะทำหรืออธิบายสิ่งต่าง ๆ เหล่านี้?

5
เหตุใด GCC จึงใช้การคูณด้วยจำนวนแปลก ๆ ในการใช้การหารจำนวนเต็ม
ฉันได้อ่านเกี่ยวกับการประกอบdivและการmulประกอบและฉันตัดสินใจที่จะเห็นพวกเขาในการดำเนินการโดยการเขียนโปรแกรมง่าย ๆ ใน C: ไฟล์ Division.c #include <stdlib.h> #include <stdio.h> int main() { size_t i = 9; size_t j = i / 5; printf("%zu\n",j); return 0; } จากนั้นสร้างรหัสภาษาแอสเซมบลีด้วย: gcc -S division.c -O0 -masm=intel แต่การดูdivision.sไฟล์ที่สร้างขึ้นมันไม่มีการดำเนินการใด ๆ ของ div! แต่กลับกลายเป็นเวทมนตร์ดำบางชนิดที่มีการเปลี่ยนบิตและตัวเลขเวทย์มนตร์ นี่คือข้อมูลโค้ดที่คำนวณi/5: mov rax, QWORD PTR [rbp-16] ; Move i (=9) to RAX …

9
makeinfo คืออะไรและฉันจะรับได้อย่างไร
ฉันกำลังพยายามสร้าง grep GNU และเมื่อฉันเริ่มทำฉันจะได้รับ: [snip] /bin/bash: line 9: makeinfo: command not found makeinfo คืออะไรและฉันจะรับได้อย่างไร (นี่คือ Ubuntu ถ้ามันสร้างความแตกต่าง)
223 ubuntu  gcc  makefile  grep 

9
วิธีปิดการใช้งานคำเตือนของ GCC สำหรับรหัสสองสามบรรทัด
ใน Visual C ++ #pragma warning (disable: ...)มันเป็นไปได้ที่จะใช้งาน นอกจากนี้ผมพบว่าใน GCC คุณสามารถแทนที่ต่อธงคอมไพเลอร์ไฟล์ ฉันจะทำสิ่งนี้สำหรับ "บรรทัดถัดไป" หรือด้วยความหมายของพุช / ป๊อปรอบ ๆ พื้นที่ของรหัสโดยใช้ GCC ได้อย่างไร

11
วิธีการระงับคำเตือน“ พารามิเตอร์ที่ไม่ได้ใช้” ใน C?
ตัวอย่างเช่น Bool NullFunc(const struct timespec *when, const char *who) { return TRUE; } ใน C ++ ฉันสามารถใส่/*...*/ความคิดเห็นรอบพารามิเตอร์ แต่ไม่ได้อยู่ใน C error: parameter name omittedแน่นอนที่มันทำให้ฉันข้อผิดพลาด
210 c  gcc  gcc-warning 

6
typedef array ความยาวคงที่
ฉันต้องกำหนดประเภทข้อมูล 24 บิตฉันใช้char[3]เพื่อแสดงประเภท ฉันสามารถ typedef char[3]เพื่อtype24? ฉันลองในตัวอย่างรหัส ฉันใส่typedef char[3] type24;ไฟล์ส่วนหัว คอมไพเลอร์ไม่ได้บ่นเกี่ยวกับมัน แต่เมื่อฉันกำหนดฟังก์ชั่นvoid foo(type24 val) {}ในไฟล์ C ของฉันมันก็บ่น ฉันต้องการที่จะสามารถที่จะกำหนดฟังก์ชั่นเช่นแทนtype24_to_int32(type24 val)type24_to_int32(char value[3])
210 c  arrays  gcc  typedef 

14
libpthread.so.0: ข้อผิดพลาดการเพิ่มสัญลักษณ์: DSO หายไปจากบรรทัดคำสั่ง
เมื่อฉันรวบรวม openvswitch-1.5.0 ฉันพบข้อผิดพลาดในการคอมไพล์ต่อไปนี้: gcc -Wstrict-prototypes -Wall -Wno-sign-compare -Wpointer-arith -Wdeclaration-after-statement -Wformat-security -Wswitch-enum -Wunused-parameter -Wstrict-aliasing -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -Wno-override-init -g -O2 -export-dynamic ***-lpthread*** -o utilities/ovs-dpctl utilities/ovs-dpctl.o lib/libopenvswitch.a /home/jyyoo/src/dpdk/build/lib/librte_eal.a /home/jyyoo/src/dpdk/build/lib/libethdev.a /home/jyyoo/src/dpdk/build/lib/librte_cmdline.a /home/jyyoo/src/dpdk/build/lib/librte_hash.a /home/jyyoo/src/dpdk/build/lib/librte_lpm.a /home/jyyoo/src/dpdk/build/lib/librte_mbuf.a /home/jyyoo/src/dpdk/build/lib/librte_ring.a /home/jyyoo/src/dpdk/build/lib/librte_mempool.a /home/jyyoo/src/dpdk/build/lib/librte_malloc.a -lrt -lm /usr/bin/ld: /home/jyyoo/src/dpdk/build/lib/librte_eal.a(eal.o): undefined reference to symbol 'pthread_create@@GLIBC_2.2.5' /lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: …

5
ฉันจะติดตั้ง imagemagick ด้วย Homebrew ได้อย่างไร
ฉันกำลังพยายามติดตั้ง Imagemagick บน OSX Lion แต่มีบางอย่างไม่ทำงานอย่างที่คาดไว้ -> brew install imagemagick /usr/local/git/bin/git ==> Cloning https://github.com/adamv/ImageMagick.git Cloning into /Users/klebershimabuku/Library/Caches/Homebrew/imagemagick--git... fatal: https://github.com/adamv/ImageMagick.git/info/refs not found: did you run git update-server-info on the server? Error: Failure while executing: git clone --depth 1 https://github.com/adamv/ImageMagick.git /Users/kleber/Library/Caches/Homebrew/imagemagick--git ชงหมอพูดว่า: -> brew doctor We couldn't detect gcc 4.0.x. Some formulae …
201 git  gcc  homebrew  osx-lion  gcc4 

3
การอ้างอิงที่ไม่ได้กำหนดถึง 'std :: cout'
นี่เป็นตัวอย่าง: #include <iostream> using namespace std; int main() { cout << "Hola, moondo.\n"; } มันพ่นข้อผิดพลาด: gcc -c main.cpp gcc -o edit main.o main.o: In function `main': main.cpp:(.text+0xa): undefined reference to `std::cout' main.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char,std::char_traits<char> >& std::operator<< <std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char> >&, char const*)' main.o: In function `__static_initialization_and_destruction_0(int,int)': main.cpp:(.text+0x3d): undefined reference …
197 c++  c++11  gcc  cout 

11
การทำงานของโมดูโลที่มีจำนวนลบ
ในโปรแกรม C ฉันพยายามดำเนินการด้านล่าง (เพียงเพื่อตรวจสอบพฤติกรรม) x = 5 % (-3); y = (-5) % (3); z = (-5) % (-3); printf("%d ,%d ,%d", x, y, z); ให้ผลลัพธ์เป็น(2, -2 , -2)gcc ฉันคาดหวังผลลัพธ์ที่เป็นบวกทุกครั้ง โมดูลัสสามารถเป็นลบได้หรือไม่? ใครช่วยอธิบายพฤติกรรมนี้ได้บ้าง
195 c  gcc  modulo 

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