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? Это может установить дополнительное программное обеспечение для вас и очистить. Я сделал это после установки 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
умеет компилировать. Заголовок ( _stdio.h
с начальным подчеркиванием) был в моем старом /usr/include
; сейчас его нет (отсюда моя проблема с GCC 8.2.0). Я запустил xcode-select --install
и сказал « xcode-select: note: install requested for command line developer tools
», а затем запустил установщик графического интерфейса, который показал мне лицензию, на которую я согласился, и он загрузил и установил инструменты командной строки - или так утверждал.
Затем я запустил Xcode GUI (командное пространство, Xcode, return) и сказал, что нужно установить еще немного программного обеспечения, но все же нет /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, вы больше не увидите папку с именем include, поэтому терминал жалуется на отсутствие заголовочных файлов, которые содержатся внутри папка «include». В примечаниях к выпуску 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
Загрузка инструментов командной строки
Как отмечает Весал в ценном комментарии , вам нужно скачать пакет инструментов командной строки для Xcode 10.1 в Mojave 10.14, и вы можете сделать это из:
Вы должны войти в систему с Apple ID, чтобы получить возможность загрузки. Когда вы закончите загрузку, установите пакет инструментов командной строки. Затем установите заголовки, как описано в разделе «Рабочее решение».
Это работало для меня на Мохаве 10.14.1. Должно быть, я скачал это раньше, но я уже забыл, когда отвечал на этот вопрос.
Обновление до Мохаве 10.14.4 и Xcode 10.2
Около 2019-05-17, я обновил до Mojave 10.14.4, и инструменты командной строки Xcode 10.2 также были обновлены (или инструменты командной строки Xcode 10.1 были обновлены до 10.2). open
Команда показано выше фиксированной недостающих заголовков. Могут все еще быть приключения с обновлением основного Xcode до 10.2 и затем переустановкой инструментов командной строки и пакета заголовков.
Обновление до Xcode 10.3 (для Мохаве 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 также был доступен (Системные настройки Update Обновление программного обеспечения) вместе с пакетом утилит командной строки 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 Mojave 10.14.6 через приложение App Store (вкладка «Обновления») без проблем и без необходимости работать /usr/include
. Сразу после установки (перед запуском самого приложения) я попробовал перекомпиляцию и мне сказали:
Для получения лицензии Xcode / iOS требуются права администратора, пожалуйста, запустите «sudo xcodebuild -license», а затем повторите эту команду.
Запуск этого ( sudo xcodebuild -license
) позволил мне запустить компилятор. С тех пор я запустил приложение для установки дополнительных компонентов, в которых оно нуждается; до сих пор нет проблем. Еще неизвестно, что произойдет, когда я обновлюсь до самой Catalina - но мои машины MacOS Mojave 10.14.6 в настоящее время исправны (2019-09-24).
echo "#include <a.h>" | gcc -v -x c -