ไม่สามารถรวบรวมโปรแกรม C บน Mac หลังจากอัปเกรดเป็น Mojave


159

ฉันใช้คำสั่ง gcc บนเทอร์มินัลเพื่อรวบรวมโปรแกรม C แต่ในทันทีหลังจากการอัปเดตเป็นระบบปฏิบัติการ Mac ของฉัน (เป็น macOS 10.14 Mojave และ XCode 10.0) ฉันเริ่มได้รับข้อความ:

test.c:8:10: fatal error: stdio.h: No such file or directory
#include <stdio.h>
         ^~~~~~~~~
compilation terminated.

ฉันติดตั้ง gcc ไว้แล้วและหาได้ใน/usr/local/binนั้นมี gcc อยู่ในนั้นจริงๆ ฉันพยายามเรียกใช้ไฟล์เดียวกันบน iMac อื่นของฉันและทำงานได้โดยไม่มีปัญหา

ฉันพยายามเรียกใช้xcode-select --installและติดตั้งแล้วดังนั้นจึงไม่สามารถแก้ไขปัญหาที่ฉันมีอยู่ในขณะนี้ ฉันคาดเดาว่าเส้นทางจะมีความยุ่งเหยิงเนื่องจากไม่สามารถหาได้gccหลังจากที่ฉันเริ่มคัดลอกและวางคำสั่งบางอย่างจากแหล่งข้อมูลอื่นเพื่อแก้ไขปัญหานี้

ต้องการความช่วยเหลือในเรื่องนี้


5
คุณสามารถตรวจสอบเส้นทางการค้นหาของ gcc ได้โดยใช้echo "#include <a.h>" | gcc -v -x c -
Matt

2
บ่อยครั้งxocde-select --installเป็นทางออกที่ถูกต้อง คุณอัพเกรดไปเป็นรุ่นใด ซ้อม 10.14? คุณได้ติดตั้ง XCode ตัวใด 10.0 หรือรุ่นอื่น?
Jonathan Leffler

39
@JanathanLeffler ฉันได้พบวิธี หากเราใช้ XCode 10 คุณจะสังเกตเห็นว่าหากคุณนำทางไปยัง / usr ใน Finder คุณจะไม่เห็นโฟลเดอร์ชื่อ 'รวม' อีกต่อไปซึ่งเป็นสาเหตุที่เทอร์มินัลบ่นว่าไม่มีไฟล์ส่วนหัวซึ่งอยู่ภายใน โฟลเดอร์ 'รวม' ในคำแถลงรีลีสนี้developer.apple.com/documentation/xcode_release_notes/ ...... (คุณนำทางไปยัง /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg และเรียกใช้แพ็คเกจนั้นเพื่อให้มีโฟลเดอร์ 'รวม' จากนั้นคุณควรจะไปดี
Maxxx

1
เมื่อทุกอย่างล้มเหลวอ่านคู่มือ! หรือบันทึกย่อประจำรุ่น ฉันไม่ประหลาดใจอย่างยิ่งที่พบว่า Apple ต้องการหันหลังให้กับมรดกของ Unix ฉันผิดหวัง. หากพวกเขาระวังพวกเขาก็สามารถขับไล่ฉันออกไปได้ ขอขอบคุณสำหรับข้อมูล; ฉันจะทดลองกับมันในภายหลัง (หลังจากจับตาไม่กี่ชั่วโมง)
Jonathan Leffler

16
หลังจากติดตั้งแพคเกจ ( open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgที่บรรทัดคำสั่ง) ฉันมี/usr/includeอีกครั้งและ GCC 8.2.0 ของฉันทำงานอีกครั้ง ขอบคุณสำหรับตัวชี้; ทำได้ดีมากในการค้นหา ฉันขอแนะนำให้คุณเขียนคำตอบเนื่องจากอาจมีคนอื่นกำลังประสบกับปัญหา
Jonathan Leffler

คำตอบ:


264

TL; DR

ตรวจสอบให้แน่ใจว่าคุณได้ดาวน์โหลดแพ็คเกจ 'เครื่องมือบรรทัดคำสั่ง' ล่าสุดและเรียกใช้จากเทอร์มินัล (บรรทัดคำสั่ง):

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

สำหรับข้อมูลบางอย่างเกี่ยวกับ Catalina ดูไม่สามารถรวบรวมโปรแกรม C บน Mac หลังจากอัพเกรด Catalina 10.15


แยกคำตอบที่กึ่งเชื่อมโยงกันจากความคิดเห็นที่ค่อนข้างครอบคลุม ...

คำนำ

บ่อยครั้งxcode-select --installเป็นคำตอบที่ถูกต้อง แต่ดูเหมือนจะไม่ช่วยในครั้งนี้ คุณได้ลองใช้ Xcode GUI interface หลักแล้วหรือยัง? มันอาจติดตั้งซอฟต์แวร์พิเศษบางอย่างสำหรับคุณและทำความสะอาด ฉันทำอย่างนั้นหลังจากติดตั้ง Xcode 10.0 แล้วแต่หนึ่งสัปดาห์ขึ้นไปนานก่อนที่จะอัพเกรดเป็น Mojave

ฉันสังเกตว่าหากติดตั้ง GCC ของคุณ/usr/local/binแล้วคุณอาจไม่ได้ใช้ GCC จาก Xcode /usr/binที่ติดตั้งตามปกติใน

ฉันได้อัปเดตเป็น macOS 10.14 Mojave และ Xcode 10.0 แล้ว อย่างไรก็ตามทั้งระบบ/usr/bin/gccและระบบ/usr/bin/clangใช้งานได้สำหรับฉัน ( Apple LLVM version 10.0.0 (clang-1000.11.45.2) Target: x86_64-apple-darwin18.0.0สำหรับทั้งคู่) ฉันมีปัญหากับ GCC ที่สร้างขึ้นเองที่บ้าน 8.2.0 ไม่พบส่วนหัวใน/usr/includeซึ่งขนานกับปัญหาของคุณโดย/usr/local/bin/gccไม่ต้องค้นหาส่วนหัว

ฉันทำการเปรียบเทียบเล็กน้อยแล้วและเครื่อง Mojave ของฉันไม่มี/usr/includeเลยเลย แต่/usr/bin/clangก็สามารถคอมไพล์ OK ได้ ส่วนหัว ( _stdio.hมีชั้นนำขีด) อยู่ในเก่าของฉัน/usr/include; มันหายไปแล้ว (ดังนั้นปัญหาของฉันกับ GCC 8.2.0) ฉันวิ่งxcode-select --installแล้วก็บอกว่า " xcode-select: note: install requested for command line developer tools" จากนั้นก็รันโปรแกรมติดตั้ง GUI ซึ่งแสดงใบอนุญาตที่ฉันตกลงและมันก็ดาวน์โหลดและติดตั้งเครื่องมือบรรทัดคำสั่ง - หรืออย่างนั้นก็อ้างว่า

จากนั้นผมก็วิ่ง Xcode GUI (คำสั่งพื้นที่ Xcode กลับ) และมันก็บอกว่ามันจำเป็นต้องติดตั้งซอฟต์แวร์บางมากขึ้น /usr/includeแต่ก็ยังไม่มี แต่ฉันสามารถคอมไพล์ด้วย/usr/bin/clangและ/usr/bin/gcc- และ-vตัวเลือกแนะนำพวกเขากำลังใช้

InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

วิธีแก้ปัญหาการทำงาน

จากนั้นMaxxx ตั้งข้อสังเกต :

ฉันพบวิธี หากเราใช้ Xcode 10 คุณจะสังเกตเห็นว่าหากคุณนำทางไปยัง/usrใน Finder คุณจะไม่เห็นโฟลเดอร์ชื่อ 'รวม' อีกต่อไปซึ่งเป็นสาเหตุที่เทอร์มินัลบ่นว่าไม่มีไฟล์ส่วนหัวที่อยู่ภายใน โฟลเดอร์ 'รวม' ในบันทึกย่อประจำรุ่น Xcode 10.0บอกว่ามีแพ็คเกจ:

/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg 

และคุณควรติดตั้งแพคเกจนั้นเพื่อ/usr/includeติดตั้งโฟลเดอร์ จากนั้นคุณควรจะไปดี

เมื่อทุกอย่างล้มเหลวให้อ่านคู่มือหรือในกรณีนี้บันทึกประจำรุ่น ฉันไม่ประหลาดใจอย่างยิ่งที่พบว่า Apple ต้องการหันหลังให้กับมรดก Unix ของพวกเขา แต่ฉันรู้สึกผิดหวัง หากพวกเขาระวังพวกเขาก็สามารถขับไล่ฉันออกไปได้ ขอขอบคุณสำหรับข้อมูล.

หลังจากติดตั้งแพคเกจโดยใช้คำสั่งต่อไปนี้ที่บรรทัดคำสั่งฉันมี/usr/includeอีกครั้งและ GCC 8.2.0 ของฉันทำงานอีกครั้ง

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

กำลังดาวน์โหลดเครื่องมือบรรทัดคำสั่ง

เมื่อVesalชี้ให้เห็นในความคิดเห็นที่มีค่าคุณจะต้องดาวน์โหลดแพ็คเกจเครื่องมือบรรทัดคำสั่งสำหรับ Xcode 10.1 บน Mojave 10.14 และคุณสามารถทำได้จาก:

คุณต้องลงชื่อเข้าใช้ด้วย Apple ID เพื่อให้สามารถดาวน์โหลดได้ เมื่อคุณดาวน์โหลดเสร็จแล้วให้ติดตั้งแพ็คเกจเครื่องมือบรรทัดคำสั่ง จากนั้นติดตั้งส่วนหัวตามที่อธิบายไว้ในส่วน 'วิธีแก้ปัญหาการทำงาน'

สิ่งนี้ใช้ได้กับฉันในโมฮาวี 10.14.1 ฉันต้องดาวน์โหลดสิ่งนี้มาก่อน แต่ฉันลืมไปแล้วเมื่อฉันตอบคำถามนี้

อัปเกรดเป็น Mojave 10.14.4 และ Xcode 10.2

ในหรือประมาณ 2019-05-17 ฉันได้รับการอัปเดตเป็นโมฮาวี 10.14.4 และเครื่องมือบรรทัดคำสั่ง Xcode 10.2 ยังได้รับการอัพเกรดด้วย (หรือเครื่องมือบรรทัดคำสั่ง Xcode 10.1 ได้รับการอัปเกรดเป็น 10.2) openคำสั่งที่ปรากฏข้างต้นคงที่ส่วนหัวที่ขาดหายไป อาจยังมีการผจญภัยที่จะมาพร้อมกับการอัพเกรด Xcode หลักเป็น 10.2 จากนั้นติดตั้งเครื่องมือบรรทัดคำสั่งและแพ็คเกจส่วนหัวอีกครั้ง

อัปเกรดเป็น Xcode 10.3 (สำหรับ Mojave 10.14.6)

ใน 2019-07-22 ฉันได้รับแจ้งผ่านทาง App Store ว่ามีการอัพเกรดเป็น Xcode 10.3 และมี SDK สำหรับ iOS 12.4, tvOS 12.4, watchOS 5.3 และ macOS Mojave 10.14.6 ฉันติดตั้งหนึ่งในเครื่อง 10.14.5 ของฉันแล้วรันและติดตั้งส่วนประกอบเพิ่มเติมตามที่แนะนำและดูเหมือนว่าจะยัง/usr/includeคงอยู่เหมือนเดิม

ต่อมาในวันเดียวกันฉันค้นพบว่า macOS Mojave 10.14.6 ก็มีให้เช่นกัน (การตั้งค่าระบบ⟶การอัปเดตซอฟต์แวร์) พร้อมกับแพ็คเกจอรรถประโยชน์บรรทัดคำสั่ง IIRC (ดาวน์โหลดและติดตั้งโดยอัตโนมัติ) การติดตั้งอัพเดต o / s ทำได้อีกแล้วล้างออก/usr/includeแต่openคำสั่งที่ด้านบนของคำตอบจะกลับมาทำงานอีกครั้ง วันที่ฉันมีไฟล์สำหรับopenคำสั่งคือ 2019-07-15

อัปเกรดเป็น XCode 11.0 (สำหรับ Catalina 10.15)

การอัพเกรดเป็น XCode 11.0 ("รวม Swift 5.1 และ SDK สำหรับ iOS 13, tvOS 13, watchOS 6 และ macOS Catalina 10.15") เปิดตัว 2019-09-21 ผมได้รับแจ้งจาก 'การปรับปรุงที่มี' และดาวน์โหลดและติดตั้งลงบนเครื่องวิ่ง MacOS ซ้อม 10.14.6 ผ่านแอป App Store (แท็บการปรับปรุง) โดยไม่มีปัญหาและโดยไม่ต้อง futz /usr/includeกับ ทันทีหลังจากการติดตั้ง (ก่อนเรียกใช้แอปพลิเคชันตัวเอง) ฉันลองรวบรวมใหม่และได้รับแจ้งว่า:

การยอมรับใบอนุญาต Xcode / iOS ต้องใช้สิทธิ์ผู้ดูแลระบบโปรดเรียกใช้“ sudo xcodebuild -license” แล้วลองคำสั่งนี้อีกครั้ง

การเรียกใช้ ( sudo xcodebuild -license) ทำให้ฉันสามารถรันคอมไพเลอร์ได้ ตั้งแต่นั้นมาฉันรันแอพพลิเคชั่นเพื่อติดตั้งส่วนประกอบเพิ่มเติมตามที่ต้องการ ยังไม่มีปัญหา มันคงต้องดูต่อไปว่าจะเกิดอะไรขึ้นเมื่อฉันอัพเกรดเป็น Catalina - แต่ macOS Mojave 10.14.6 ของฉันนั้นใช้ได้ทั้งสองเครื่องในตอนนี้ (2019-09-24)


4
อ่าขอบคุณที่เขียนสิ่งนี้ ชื่นชมมาก ไชโย!
Maxxx

6
แก้ไขเพื่อฉัน !!! ขอบคุณมากที่สละเวลาเขียนสิ่งนี้!
budekatude

8
Grump !!! สิ่งต่าง ๆ มีการเปลี่ยนแปลงอีกครั้งด้วยการอัปเดต 10.14.1 - หรืออย่างน้อยพวกเขาก็ดูเหมือนจะมีการเปลี่ยนแปลงอีกครั้ง สำหรับฉันดูเหมือนว่าการอัพเดทจะหายไป/usr/includeและแพคเกจที่แสดงในคำตอบข้างต้นไม่ได้ปรากฏอยู่/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgและxcode-select --installบอกว่าเครื่องมือบรรทัดคำสั่งไม่สามารถใช้งานได้ในขณะนี้
Jonathan Leffler

15
Fcking Apple พวกเขาไม่สามารถทิ้งสิ่งที่ใช้งานได้พวกเขาต้องย้ายสิ่งต่าง ๆ เพิ่มขั้นตอนและสร้างความปั่นป่วน

7
ด้วยความหวังว่าเครื่องมือค้นหาจะพบคำตอบนี้คำแนะนำข้างต้นได้แก้ไขfatal error: bits/ctype_base.h: No such file or directory: #include <bits/ctype_base.h>เมื่อรวบรวม GCC 7.4.0 โดยใช้ libstdc ++ บน Mojave สำหรับฉัน
Adam Lindberg

30

หลังจากลองตอบทุกคำถามฉันสามารถหาได้ที่นี่และออนไลน์ฉันยังคงได้รับข้อผิดพลาดสำหรับส่วนหัวที่หายไป เมื่อพยายามรวบรวม pyRFR ฉันพบข้อผิดพลาดเกี่ยวกับการstdexceptไม่พบซึ่งดูเหมือนไม่ได้ติดตั้งใน/usr/includeส่วนหัวอื่น ๆ อย่างไรก็ตามฉันพบว่ามันซ่อนอยู่ที่ไหนในโมฮาวีและเพิ่มไฟล์นี้ไว้ที่ส่วนท้ายของ~/.bash_profileไฟล์ของฉัน:

export CPATH=/Library/Developer/CommandLineTools/usr/include/c++/v1

เมื่อทำอย่างนั้นตอนนี้ฉันสามารถรวบรวม pyRFR และโปรแกรม C / C ++ อื่น ๆ ตามที่echo | gcc -E -Wp,-v -gcc กำลังค้นหาในตำแหน่งเก่าสำหรับส่วนหัวเหล่านี้ (โดยไม่มี/c++/v1) แต่ไม่ใช่ตำแหน่งใหม่ดังนั้นการเพิ่มลงใน CFLAGS จะแก้ไขได้


ไม่มีอะไรทำงาน แต่อันนี้ก็ทำ ขอบคุณมาก!!
เฟลิกซ์

2
wickedsickbrothnx
Davis Dulin

23

เมื่อคุณ

  • อัปเดตเป็น Mojave 10.14.6
  • คุณ/usr/includeถูกลบอีกครั้ง
  • แพ็คเกจที่ระบุในคำตอบ @ Jonathan-lefflers ไม่มีอยู่อีกแล้ว The file /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg does not exist.และ
  • Xcode บ่นว่าเครื่องมือบรรทัดคำสั่งได้รับการติดตั้งแล้ว xcode-select --install xcode-select: error: command line tools are already installed, use "Software Update" to install updates

แล้วสิ่งที่ช่วยให้ฉันกู้คืนแพคเกจดังกล่าวถูกลบทั้งCommandLineToolsโฟลเดอร์ และติดตั้ง(sudo) rm -rf /Library/Developer/CommandLineToolsxcode-select --install


ยอดเยี่ยม หลังจากก้าวของคุณmacOS_SDK_headers_for_macOS_10.14.pkgรับพร้อมใช้งานและคำสั่งopen /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgทำในสิ่งที่ควรทำ ขอบคุณหนึ่งล้าน !!
Bruno Ambrozio

3
สำหรับฉันแล้วงานต่อไปนี้: export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include
rbieber

ขอบคุณ! ฉันติดอยู่ แต่นี่ใช้งานได้จริงสำหรับฉันกับโมฮาวี 10.4.6 และ XCode 11.3.1
ไซเมียนจี

ทุกครั้งที่ Apple เปิดตัวการอัปเดตระบบฉันต้องแก้ไขปัญหานี้ด้วย Clion ในวิธีที่ต่างกัน
igonejack

12

ปัญหาคือ Xcode โดยเฉพาะอย่างยิ่ง Xcode 10.x ยังไม่ได้ติดตั้งทุกอย่างดังนั้นให้แน่ใจว่าติดตั้งเครื่องมือบรรทัดคำสั่งแล้วให้พิมพ์สิ่งนี้ในเทอร์มินัลเชลล์:

xcode-select - ติดตั้ง

เริ่ม Xcode และตรวจสอบให้แน่ใจว่ามีการติดตั้งที่จำเป็นทั้งหมด (คุณควรได้รับพร้อมท์หากไม่ได้เป็นเช่นนั้น) และเนื่องจาก Xcode 10 ไม่ได้ติดตั้ง Mac OS SDK แบบเต็มให้รันโปรแกรมติดตั้งที่

/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

เนื่องจากแพ็คเกจนี้ไม่ได้ติดตั้งโดย Xcode 10


1
สิ่งนี้ช่วยฉัน ขอบคุณมาก!
Demven Weir


5

หมายเหตุ: ต่อไปนี้มีแนวโน้มสูงตามบริบทและเวลาที่ จำกัด ก่อนที่สวิตช์ / ความพร้อมใช้งานทั่วไปของ macos Catalina 10.15 แล็ปท็อปใหม่ ฉันกำลังเขียนนี้ 1 ต.ค. 2019

ฉันเชื่อว่าสถานการณ์เฉพาะเหล่านี้คือสิ่งที่ทำให้เกิดปัญหาในการสร้างสำหรับฉัน พวกเขาอาจไม่ได้ใช้ในกรณีอื่น ๆ ส่วนใหญ่

บริบท:

  • MacOS 10.14.6 ซ้อม Xcode 11.0 ขวาก่อนการเปิดตัวของ MacOS Catalina 10.15 Macbook Pro ที่เพิ่งซื้อมาใหม่

  • ความล้มเหลวบนpip install psycopg2ซึ่งก็คือแพคเกจ Python ที่รวบรวมจากแหล่งที่มา

  • ฉันได้ทำการปรับปรุงตามที่แนะนำในคำตอบที่ให้ไว้ที่นี่จำนวนหนึ่งแล้ว

ข้อผิดพลาดของฉัน:

pip install psycopg2
Collecting psycopg2
  Using cached https://files.pythonhosted.org/packages/5c/1c/6997288da181277a0c29bc39a5f9143ff20b8c99f2a7d059cfb55163e165/psycopg2-2.8.3.tar.gz
Installing collected packages: psycopg2
  Running setup.py install for psycopg2 ... error
    ERROR: Command errored out with exit status 1:
     command: xxxx/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/bk/_1cwm6dj3h1c0ptrhvr2v7dc0000gs/T/pip-install-z0qca56g/psycopg2/setup.py'"'"'; __file__='"'"'/private/var/folders/bk/_1cwm6dj3h1c0ptrhvr2v7dc0000gs/T/pip-install-z0qca56g/psycopg2/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/bk/_1cwm6dj3h1c0ptrhvr2v7dc0000gs/T/pip-record-ef126d8d/install-record.txt --single-version-externally-managed --compile --install-headers xxx/venv/include/site/python3.6/psycopg2


...
/usr/bin/clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -pipe -Os -isysroot/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -DPSYCOPG_VERSION=2.8.3 (dt dec pq3 ext lo64) -DPG_VERSION_NUM=90615 -DHAVE_LO64=1 -I/Users/jluc/kds2/py2/venv/include -I/opt/local/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m -I. -I/opt/local/include/postgresql96 -I/opt/local/include/postgresql96/server -c psycopg/psycopgmodule.c -o build/temp.macosx-10.14-x86_64-3.6/psycopg/psycopgmodule.o

    clang: warning: no such sysroot directory: 
'/Applications/Xcode.app/Contents/Developer/Platforms
                              ❌👇the real error👇❌
/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk' [-Wmissing-sysroot]
    In file included from psycopg/psycopgmodule.c:27:
    In file included from ./psycopg/psycopg.h:34:
    /opt/local/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m/Python.h:25:10: fatal error: 'stdio.h' file not found
                             ❌👆 what I thought was the error 👆❌
    #include <stdio.h>
             ^~~~~~~~~
    1 error generated.

    It appears you are missing some prerequisite to build the package 

สิ่งที่ฉันทำจนถึงตอนนี้โดยไม่แก้ไขอะไรเลย:

  • xcode-select --install
  • ติดตั้ง xcode
  • open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

ยังคงเป็นข้อผิดพลาดเดียวกันใน stdio.h

ซึ่งมีอยู่ในหลายแห่ง:

(venv) jluc@bemyerp$ mdfind -name stdio.h
/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/stdio.h
/usr/include/_stdio.h
/usr/include/secure/_stdio.h
/usr/include/stdio.h   👈 I believe this is the one that's usually missing.
                            but I have it.
/usr/include/sys/stdio.h
/usr/include/xlocale/_stdio.h

ดังนั้นไปที่ไดเรกทอรีแรกที่clangบ่นและดู:

(venv) jluc@gotchas$ cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
(venv) jluc@SDKs$ ls -l
total 0
drwxr-xr-x  8 root  wheel  256 Aug 29 23:47 MacOSX.sdk
drwxr-xr-x  4 root  wheel  128 Aug 29 23:47 DriverKit19.0.sdk
drwxr-xr-x  6 root  wheel  192 Sep 11 04:47 ..
lrwxr-xr-x  1 root  wheel   10 Oct  1 13:28 MacOSX10.15.sdk -> MacOSX.sdk  👈
drwxr-xr-x  5 root  wheel  160 Oct  1 13:34 .

ฮะเรามี symlink สำหรับMacOSX10.15.sdkแต่ไม่มีสำหรับMacOSX10.14.sdk นี่คือclangข้อผิดพลาดครั้งแรกของฉันอีกครั้ง:

clang: warning: no such sysroot directory: '/Applications/Xcode.app/.../Developer/SDKs/MacOSX10.14.sdk' [-Wmissing-sysroot]

ฉันเดาว่า Apple กระโดดปืนจากค่ากำหนด xcode ของพวกเขาแล้วและคิดว่าพวกเขาอยู่ใน Catalina แล้ว เนื่องจากเป็น Mac เครื่องใหม่การกำหนดค่าแบบเก่าสำหรับ 10.14 จึงไม่สามารถทำได้

การแก้ไข:

Let's symlink 10.14 เช่นเดียวกับ 10.15:

ln -s MacOSX.sdk/ MacOSX10.14.sdk

btw ถ้าฉันไปที่ไดเรกทอรี sdk ฉันพบว่า:

...
./usr/include/sys/stdio.h
./usr/include/stdio.h
....

ผล:

pip install psycopg2 โรงงาน

หมายเหตุ: คำสั่ง pip install จริงไม่ได้อ้างถึงMacOSX10.14.sdkซึ่งมาในภายหลังอาจเป็นไปได้ว่ากลไกการติดตั้ง Python จะตรวจสอบเวอร์ชันของระบบปฏิบัติการ


ซึ่งpipที่คุณใช้? ฉันคิดว่านั่นอาจเป็นปัญหาสำคัญ
แฟรงคลินหยู

3

อย่าลืมตรวจสอบการตั้งค่า Xcode -> ที่ตั้ง

เครื่องมือบรรทัดคำสั่งที่ฉันเลือกมีไว้สำหรับ Xcode รุ่นก่อนหน้า (8.2.1 แทน 10.1)


2

มีปัญหาคล้ายกันกับ OP

ปัญหา

แมวสวัสดี

#include <stdlib.h>
int main() { exit(0); }

ดังกราว hello.c

/usr/local/include/stdint.h:2:10: error: #include nested too deeply
etc...

พยายามแก้ไข

ฉันติดตั้ง XCode รุ่นล่าสุดแล้วอย่างไรก็ตามบันทึกย่อประจำรุ่นระบุว่าไฟล์ที่กล่าวถึงในการแก้ไขก่อนหน้านี้จาก Jonathan ที่นี่ไม่สามารถใช้ได้อีกต่อไป

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

รายละเอียดได้ที่นี่ https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notesภายใต้ส่วนคุณสมบัติใหม่


โซลูชันที่เหมาะกับฉัน ...

ใช้รายละเอียดในความคิดเห็นนี้https://github.com/SOHU-Co/kafka-node/issues/881#issuecomment-396197724

ฉันพบว่าbrew doctorรายงานว่าฉันไม่ได้ใช้มีอยู่ใน/usr/local/โฟลเดอร์ของฉัน

ดังนั้นเพื่อแก้ไขฉันใช้คำสั่งที่จัดทำโดยผู้ใช้HowCrazyเพื่อค้นหาการรวมที่ไม่ได้ใช้และย้ายไปยังโฟลเดอร์ชั่วคราว

ซ้ำที่นี่ ...

mkdir /tmp/includes
brew doctor 2>&1 | grep "/usr/local/include" | awk '{$1=$1;print}' | xargs -I _ mv _ /tmp/includes

หลังจากเรียกใช้สคริปต์ปัญหาไฟล์ include หายไป nb: ฉันแสดงความคิดเห็นเกี่ยวกับปัญหานี้ที่นี่ด้วย


1

ผมมีปัญหานี้และไม่มีอะไรทำงาน ฉันวิ่งxcode-select --installและติดตั้ง/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgแล้ว

พื้นหลัง

เนื่องจากผมมีปัญหาเกี่ยวกับApp Storeบนแล็ปท็อปใหม่ผมถูกบังคับให้ดาวน์โหลดXcode Betaติดตั้งได้จากเว็บไซต์ของแอปเปิ้ลที่จะติดตั้ง Xcode นอกApp Store ดังนั้นฉันเพิ่งติดตั้งXcode Beta

สารละลาย

นี่ (ฉันคิดว่า) กำลังclangหาSDKROOTไดเรกทอรีไม่พบ/Applications/Xcode.app/....เพราะไม่มีBetaเส้นทางหรือXcode Betaอาจจะไม่ได้ติดตั้ง (ฉันไม่รู้) ในการแก้ไขปัญหาฉันต้องลบXcode Betaและแก้ไขApp Storeเพื่อติดตั้งรุ่นที่วางจำหน่าย

TLDR;

หากคุณมีXcode Betaให้ลองทำความสะอาดทุกอย่างและติดตั้งรุ่นที่วางจำหน่ายก่อนที่จะลองใช้โซลูชันที่ใช้งานได้กับคนอื่น


1

ฉันพยายามแก้ไขปัญหาโพสต์เกือบทั้งหมดและไม่มีอะไรทำงานให้ฉัน ฉันใช้ Mojave OS (10.14.6) และสิ่งที่ใช้งานได้ในที่สุด (หลังจากลบและติดตั้งส่วนหัว Xcode และ CLTs และ SDK อีกครั้ง):

  1. ติดตั้ง Clang v8 จากhttps://cran.r-project.org/bin/macosx/tools/
  2. แก้ไขบรรทัดต่อไปนี้จากไฟล์ ~ / .R / Makevars
CC=/usr/local/opt/llvm/bin/clang -fopenmp
CXX=/usr/local/opt/llvm/bin/clang++

กับ

CC=/usr/local/clang8/bin/clang -fopenmp
CXX=/usr/local/clang8/bin/clang++

ตอนนี้แพ็คเกจ R ที่พึ่งพาคอมไพเลอร์ C ติดตั้งสำเร็จ


0

ดังที่ Jonathan Leffler ชี้ให้เห็นข้างต้นไฟล์ macOS_SDK_headers.pkg จะไม่มีอยู่ใน Xcode 10.1 อีกต่อไป

สิ่งที่ใช้ได้ผลสำหรับฉันคือการทำbrew upgradeและการอัปเดตของ gcc และ / หรือสิ่งอื่นใดที่ homebrew ทำอยู่เบื้องหลังช่วยแก้ปัญหาเส้นทาง


0

apue.h การพึ่งพายังคงหายไป/usr/local/includeหลังจากที่ฉันจัดการเพื่อแก้ไขปัญหานี้ใน Mac OS Catalina โดยทำตามคำแนะนำของคำตอบนี้

ฉันดาวน์โหลดการอ้างอิงด้วยตนเองจากคอมไพล์และใส่ไว้ใน/usr/local/include


0

ฉันมีปัญหาเดียวกันกับ Golang (การดีบักด้วย Goland) หลังจากการย้ายข้อมูล สิ่งเดียวที่น่าขัน (ไร้สาระ) ที่ช่วยเปลี่ยนชื่อโฟลเดอร์ต่อไปนี้:

sudo mv /usr/local/include /usr/local/old_include

เห็นได้ชัดว่ามันเกี่ยวข้องกับไฟล์เก่าที่ homebrew ติดตั้งและใช้งานไม่ได้


-1

@JL Peyret ถูกต้อง!

ถ้าคุณ macos 10.14.6 Mojave, Xcode 11.0+

แล้วก็

cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

sudo ln -s MacOSX.sdk / MacOSX10.14.sdk


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