ข้อผิดพลาดร้ายแรงของ GCC: stdio.h: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว


92

ฉันพยายามรวบรวมโปรแกรมใน C บน OS X 10.9 ด้วย GCC 4.9 (ทดลอง) ด้วยเหตุผลบางประการฉันได้รับข้อผิดพลาดต่อไปนี้ในเวลาคอมไพล์:

gcc: fatal error: stdio.h: No such file or directory

จากนั้นฉันลองใช้โปรแกรม Hello World ง่ายๆ:

อีกครั้งเมื่อทำงานgcc -o ~/hello ~/hello.cฉันได้รับข้อผิดพลาดเดียวกัน ผมใช้รุ่นทดลองแต่ดูเหมือนว่าไม่น่าเชื่อว่าจะมีการเปิดตัวที่สร้างข้อผิดพลาดเมื่อนำเข้าgcc stdioอะไรอาจทำให้เกิดปัญหานี้และจะแก้ไขได้อย่างไร


11
คุณสามารถดูได้ว่า gcc กำลังค้นหาไฟล์ส่วนหัวที่ใดโดยการทำecho "#include <bogus.h>" | gcc -v -x c -และตรวจสอบเส้นทางการค้นหา
Christian Ternus

1
คำสั่งที่มีประโยชน์มาก! ดูเหมือนจะไม่stdio.hอยู่ในเส้นทางการค้นหาของ GCC
Jules

2
Mavericks ไม่มีฐาน / usr / include อีกต่อไป คุณต้องเชื่อมโยงเข้าที่จาก XCode OS 10.9 SDK
ญาณรามินทร์

3
BTW int mainพารามิเตอร์แรกคือ int และไม่ใช่ int * argc
p0lAris

3
@ user2615799 อยู่ที่sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include /usr/include
Yann Ramin

คำตอบ:


143

Mac OS X

ฉันมีปัญหานี้เช่นกัน (พบผ่านคอมไพเลอร์ Macports) Xcode เวอร์ชันก่อนหน้าจะช่วยให้คุณสามารถติดตั้งเครื่องมือบรรทัดคำสั่งผ่าน xcode / Preferences ได้ แต่ xcode5 ไม่ได้ให้ตัวเลือกเครื่องมือบรรทัดคำสั่งใน GUI ดังนั้นฉันจึงถือว่ามันถูกรวมไว้โดยอัตโนมัติในตอนนี้ ลองเรียกใช้คำสั่งนี้:

Ubuntu

(ตามคำตอบนี้)

อัลไพน์ลินุกซ์

(ตามความคิดเห็นนี้)


หากคุณใช้ Xcode 6 beta 5 คำสั่งนี้อาจล้มเหลว sudo xcode-select -s /Applications/Xcode.appในกรณีที่คุณต้องทำ sudo xcode-select -s /Applications/Xcode6-Beta5.appเมื่อคุณทำเสร็จแล้วสลับกลับไปใช้
Sjors Provoost

1
ว้าว. ยังคงทำงานร่วมกับ Xcode 8.0 และ Sierra ในปี 2017
user124384

1
คู่มืออัลไพน์มีประโยชน์อย่างยิ่งสำหรับภาพนักเทียบท่าที่อิงจากอัลไพน์ดิสโตรทำงานได้ตามต้องการ
VanDavv

ข้อเสนอแนะสำหรับผู้ใช้ windows? ฉันมีปัญหานี้บน windows
Ratul Hasan

1
สำหรับผู้ใช้ macOS ที่ยังประสบปัญหาหลังจากติดตั้ง CLTs stackoverflow.com/questions/63342521/…

46

Mac OS Mojave

คำตอบที่ยอมรับใช้ไม่ได้อีกต่อไป เมื่อรันคำสั่งxcode-select --installจะบอกให้คุณใช้ "Software Update" เพื่อติดตั้งโปรแกรมปรับปรุง

ในลิงค์นี้เป็นวิธีการปรับปรุง:

เปิด Terminal จากนั้น:

เพื่อเปิดตัวช่วยสร้างการติดตั้ง

อัปเดต 12/2019

หลังจากอัปเดตเป็น Mojave 10.15.1 ดูเหมือนว่าจะใช้xcode-select --installงานได้ตามที่ตั้งใจไว้


การติดตั้งส่วนหัวใหม่จะใช้งานได้เช่นกันเมื่ออัปเกรดเป็น Xcode 10.2
Bojan Dimovski

เมื่อฉันเปิด macOS_SDK_headers_for_macOS_10.14.pkg ฉันได้รับคำเตือนที่น่ากลัวจากโปรแกรมติดตั้ง: "แพ็คเกจนี้เข้ากันไม่ได้กับ macOS เวอร์ชันนี้และอาจไม่สามารถติดตั้งได้" ฉันมีโมฮาวี
Steve Siegel

@SteveSiegel คุณใช้ Mac OS เวอร์ชันใดอยู่ ฉันอัปเกรดเป็น 10.15.1 แล้วและฉันไม่ต้องแก้ปัญหานี้อีกต่อไป อัปเดตคำตอบของฉันเพื่อให้สอดคล้องกับสิ่งนั้น
Samshel

"อัปเดตเป็น Mojave 10.15.1" นั้นไม่ถูกต้อง @SteveSiegel pkg เลิกใช้แล้ว ควรใช้ SDKROOT stackoverflow.com/a/63343829/10063119

23

ผู้ใช้ Ubuntu:

sudo apt-get install libc6-dev

นักพัฒนา Ruby โดยเฉพาะที่มีปัญหาในการติดตั้งgem install json -v '1.8.2'บน VM


1
น่าสนใจ. ขอบคุณ. lib นี้ยังช่วยแก้ปัญหาอื่น ๆ เมื่อเร็ว ๆ นี้ฉันพบว่ามันพยายามเรียกใช้เกณฑ์มาตรฐานสำหรับ petabyet.com (ซึ่งใช้ gcc)
dhaupin

14
ฉันต้องการบนลินุกซ์อัลไพน์apk add libc-dev
เฉด

3

ผมมีปัญหาเดียวกัน. ฉันติดตั้ง "XCode: development tools" จากแอปสโตร์และแก้ไขปัญหาให้ฉัน

ฉันคิดว่าลิงก์นี้จะช่วยได้: https://itunes.apple.com/us/app/xcode/id497799835?mt=12&ls=1

เครดิต Yann Ramin สำหรับคำแนะนำของเขา ฉันคิดว่ามีวิธีแก้ปัญหาที่ดีกว่าด้วยลิงก์ แต่ทำได้ง่ายและรวดเร็ว

โชคดี!


คุณหมายถึง Xcode ปกติหรือไม่? หรือมีรุ่นพิเศษที่เรียกว่า "XCode: development tools"? เพราะฉันเห็น Xcode ปกติใน App Store เท่านั้น จริงอยู่นี่คือ 4 ปีในอนาคตนับจากวันที่คำตอบนี้ถูกโพสต์
user124384

1

ฉันรู้ว่ากรณีของฉันหายาก แต่ฉันจะยังคงเพิ่มที่นี่สำหรับคนที่มีปัญหาในภายหลัง ฉันมีเป้าหมายโมดูลเคอร์เนล Linux ใน Makefile ของฉันและฉันพยายามรวบรวมโปรแกรมพื้นที่ผู้ใช้ของฉันร่วมกับโมดูลเคอร์เนลที่ไม่มี stdio การกำหนดเป้าหมายแยกต่างหากช่วยแก้ปัญหาได้

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