TL; DR
Đảm bảo bạn đã tải xuống gói 'Công cụ dòng lệnh' mới nhất và chạy gói này từ thiết bị đầu cuối (dòng lệnh):
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
Để biết một số thông tin về Catalina, hãy xem Không thể biên dịch chương trình C trên máy Mac sau khi nâng cấp lên Catalina 10.15 .
Trích một câu trả lời nửa mạch lạc từ những bình luận khá rộng rãi
Lời nói đầu
Rất thường xuyên, xcode-select --install
đã là giải pháp chính xác, nhưng dường như nó không giúp được gì cho lần này. Bạn đã thử chạy giao diện Xcode GUI chính chưa? Nó có thể cài đặt một số phần mềm bổ sung cho bạn và dọn dẹp. Tôi đã làm điều đó sau khi cài đặt Xcode 10.0, nhưng một tuần trở lên, rất lâu trước khi nâng cấp lên Mojave.
Tôi quan sát rằng nếu GCC của bạn được cài đặt /usr/local/bin
, có lẽ bạn không sử dụng GCC từ Xcode; mà thường được cài đặt trong /usr/bin
.
Tôi cũng đã cập nhật lên macOS 10.14 Mojave và Xcode 10.0. Tuy nhiên, cả hệ thống /usr/bin/gcc
và hệ thống /usr/bin/clang
đều hoạt động với tôi ( Apple LLVM version 10.0.0 (clang-1000.11.45.2) Target: x86_64-apple-darwin18.0.0
cho cả hai.) Tôi gặp vấn đề với GCC 8.2.0 do tôi tự tạo, không tìm thấy tiêu đề /usr/include
, song song với vấn đề của bạn là /usr/local/bin/gcc
không tìm thấy tiêu đề.
Tôi đã thực hiện một chút so sánh, và máy Mojave của tôi hoàn toàn không có /usr/include
, nhưng vẫn /usr/bin/clang
có thể biên dịch OK. Một tiêu đề ( _stdio.h
, với dấu gạch dưới hàng đầu) là trong cái cũ của tôi /usr/include
; hiện tại nó bị thiếu (do đó, vấn đề của tôi với GCC 8.2.0). Tôi đã chạy xcode-select --install
và nó nói " xcode-select: note: install requested for command line developer tools
" và sau đó chạy trình cài đặt GUI cho tôi xem giấy phép mà tôi đã đồng ý, và nó đã tải xuống và cài đặt các công cụ dòng lệnh - hoặc do đó, nó đã yêu cầu.
Sau đó tôi đã chạy Xcode GUI (không gian lệnh, Xcode, trả về) và nó nói rằng nó cần phải cài đặt thêm một số phần mềm, nhưng vẫn không có /usr/include
. Nhưng tôi có thể biên dịch với /usr/bin/clang
và /usr/bin/gcc
- và -v
tùy chọn cho thấy họ đang sử dụng
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
Giải pháp làm việc
Sau đó, Maxxx lưu ý :
Tôi đã tìm thấy một cách. Nếu chúng tôi đang sử dụng Xcode 10, bạn sẽ nhận thấy rằng nếu bạn điều hướng đến /usr
Finder, bạn sẽ không thấy thư mục có tên 'bao gồm' nữa, đó là lý do tại sao thiết bị đầu cuối phàn nàn về sự vắng mặt của các tệp tiêu đề được chứa bên trong thư mục 'bao gồm'. Trong Ghi chú phát hành Xcode 10.0 , nó cho biết có một gói:
/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
và bạn nên cài đặt gói đó để /usr/include
cài đặt thư mục. Sau đó, bạn nên tốt để đi.
Khi vẫn thất bại, hãy đọc hướng dẫn hoặc, trong trường hợp này, ghi chú phát hành. Tôi không ngạc nhiên khi thấy Apple muốn quay lưng lại với di sản Unix của họ, nhưng tôi thất vọng. Nếu họ cẩn thận, họ có thể đuổi tôi đi. Cảm ơn bạn đã thông tin.
Sau khi cài đặt gói bằng cách sử dụng lệnh sau tại dòng lệnh, tôi /usr/include
lại có một lần nữa và GCC 8.2.0 của tôi hoạt động trở lại.
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
Đang tải xuống công cụ dòng lệnh
Như Vesal chỉ ra trong một nhận xét có giá trị , bạn cần tải xuống gói Công cụ dòng lệnh cho Xcode 10.1 trên Mojave 10.14 và bạn có thể làm như vậy từ:
Bạn cần đăng nhập bằng ID Apple để có thể tải xuống. Khi bạn đã tải xuống xong, hãy cài đặt gói Công cụ dòng lệnh. Sau đó cài đặt các tiêu đề như được mô tả trong phần 'Giải pháp làm việc'.
Điều này làm việc cho tôi trên Mojave 10.14.1. Tôi đã tải xuống cái này trước đây, nhưng tôi đã quên mất lúc tôi trả lời câu hỏi này.
Nâng cấp lên Mojave 10.14.4 và Xcode 10.2
Vào khoảng 2019-05-17, tôi đã cập nhật lên Mojave 10.14.4 và các công cụ dòng lệnh Xcode 10.2 cũng được nâng cấp (hoặc các công cụ dòng lệnh Xcode 10.1 được nâng cấp lên 10.2). Các open
lệnh hiển thị ở trên cố định các tiêu đề thiếu. Vẫn có thể có những cuộc phiêu lưu đi kèm với việc nâng cấp Xcode chính lên 10.2 và sau đó cài đặt lại các công cụ dòng lệnh và gói tiêu đề.
Nâng cấp lên Xcode 10.3 (đối với Mojave 10.14.6)
Vào 2019-07-22, tôi nhận được thông báo qua App Store rằng bản nâng cấp lên Xcode 10.3 đã có sẵn và nó bao gồm SDK cho iOS 12.4, tvOS 12.4, watchOS 5.3 và macOS Mojave 10.14.6. Tôi đã cài đặt nó một trong những máy 10.14.5 của mình, và chạy nó và cài đặt các thành phần bổ sung như nó đề xuất và dường như nó /usr/include
vẫn còn nguyên vẹn.
Sau đó cùng ngày, tôi phát hiện ra rằng macOS Mojave 10.14.6 cũng có sẵn (Tùy chọn hệ thống Update Cập nhật phần mềm), cùng với gói IIrc tiện ích dòng lệnh (nó được tải xuống và cài đặt tự động). Việc cài đặt bản cập nhật o / s đã làm, một lần nữa, xóa sạch /usr/include
, nhưng open
lệnh ở đầu câu trả lời lại khôi phục nó. Ngày tôi có trong tệp cho open
lệnh là 2019-07-15.
Nâng cấp lên XCode 11.0 (cho Catalina 10.15)
Bản nâng cấp lên XCode 11.0 ("bao gồm Swift 5.1 và SDK cho iOS 13, tvOS 13, watchOS 6 và macOS Catalina 10.15") đã được phát hành 2019-09-21. Tôi đã được thông báo về 'các bản cập nhật khả dụng', và đã tải xuống và cài đặt nó vào các máy chạy macOS Mojave 10.14.6 thông qua ứng dụng App Store (tab cập nhật) mà không gặp sự cố và không cần phải sử dụng /usr/include
. Ngay sau khi cài đặt (trước khi tự chạy ứng dụng), tôi đã thử biên dịch lại và được thông báo:
Đồng ý với giấy phép Xcode / iOS yêu cầu quyền quản trị viên, vui lòng chạy, sudo xcodebuild -license, sau đó thử lại lệnh này.
Chạy mà ( sudo xcodebuild -license
) cho phép tôi chạy trình biên dịch. Kể từ đó, tôi đã chạy ứng dụng để cài đặt thêm các thành phần cần thiết; vẫn không có vấn đề gì Vẫn còn phải xem điều gì sẽ xảy ra khi tôi nâng cấp lên chính Catalina - nhưng các máy macOS Mojave 10.14.6 của tôi đều ổn vào lúc này (2019-09-24).
echo "#include <a.h>" | gcc -v -x c -