Не могу скомпилировать программу C на Mac после обновления до Мохаве - PullRequest
0 голосов
/ 26 сентября 2018

Я использовал команду gcc на терминале для компиляции программ на Си, но внезапно, после обновления операционной системы моего 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 после того, как я начал копировать и вставлять некоторые команды из других ресурсов для решения этой проблемы.

Нужна помощь поэто.

Ответы [ 8 ]

0 голосов
/ 22 апреля 2019

Я нашел отличное решение и объяснение в этом комментарии GitHub .Трюк:

make SDKROOT=`xcrun --show-sdk-path` MACOSX_DEPLOYMENT_TARGET=

Сделал работу.

0 голосов
/ 23 марта 2019

Были проблемы, похожие на OP

Проблема

cat hello.c

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

clang hello.c

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

Попытка исправить

Я установил последнюю версию XCode, однако, в примечаниях к выпуску указывалось, что файл, упомянутый в предыдущем исправлении от Джонатана, больше не доступен.

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

После запуска сценариев проблема с включаемым файлом исчезла.nb: Я прокомментировал эту проблему здесь тоже.

0 голосов
/ 09 апреля 2019

Проблема в том, что Xcode, особенно Xcode 10.x, не установил все, поэтому убедитесь, что инструменты командной строки установлены, введите его в оболочке терминала:

xcode-выберите --install

, также запустите XCode и убедитесь, что установлена ​​вся необходимая установка (в противном случае вы получите запрос), а XCode 10 не устанавливает полный Mac OS SDK.запустите установщик по адресу

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

, так как этот пакет не устанавливаетсяXCode 10.

0 голосов
/ 14 марта 2019

Как отмечает Джонатан Леффлер выше, файл macOS_SDK_headers.pkg больше не существует в Xcode 10.1.

Для меня работало brew upgrade и обновлениями gcc и / или чего-либо еще homebrewсделал за кулисами решенные проблемы пути.

0 голосов
/ 14 марта 2019

У меня была эта проблема, и ничего не помогло .Я запустил xcode-select --install, а также установил /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg.

ФОН

Поскольку у меня были проблемы с App Store на новом ноутбуке,Я был вынужден загрузить установщик XCode Beta с веб-сайта Apple, чтобы установить XCode вне App Store .Так что у меня было установлено только XCode Beta .

РЕШЕНИЕ

Это, (я думаю), делало clang чтобы не найти каталог SDKROOT /Applications/Xcode.app/...., потому что в пути нет Beta, или, возможно, XCode Beta просто не устанавливает его (я нет знаю).Чтобы решить эту проблему, мне пришлось удалить XCode Beta и решить проблему App Store , чтобы установить версию выпуска.

tldr;

Если у вас есть XCode Beta , попробуйте очистить все и установить версию выпуска, прежде чем пробовать решения, работающие для других людей.

0 голосов
/ 17 февраля 2019

После проверки каждого ответа, который я смог найти здесь и в Интернете, я все еще получал ошибки для некоторых пропущенных заголовков.Когда я пытался скомпилировать 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 исправило его.

0 голосов
/ 08 января 2019

Обязательно проверьте Xcode Preferences -> Locations.

Инструменты командной строки, которые я выбрал, были для предыдущей версии Xcode (8.2.1 вместо 10.1)

0 голосов
/ 27 сентября 2018

TL; DR

Убедитесь, что вы загрузили последний пакет 'Инструменты командной строки' и запустите его из терминала (командной строки):

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

Извлечение полусвязного ответа из довольно обширных комментариев…

Преамбула

Очень часто 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

Загрузка инструментов командной строки

Поскольку Vesal указывает на ценный комментарий , вам необходимо загрузить пакет инструментов командной строки для Xcode 10.1 в Mojave 10.14, и выэто можно сделать из:

Вам необходимо войти в систему с Apple ID, чтобы получить возможность загрузки.После завершения загрузки установите пакет инструментов командной строки.Затем установите заголовки, как описано в разделе «Рабочее решение».

Это сработало для меня в Mojave 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 (для 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 Mojave10.14.6 также был доступен (Системные настройки Update Обновление программного обеспечения) вместе с пакетом утилит командной строки IIRC (он был загружен и установлен автоматически).Установка обновления o / s снова уничтожила /usr/include, но команда open в верхней части ответа снова восстановила его.Дата, указанная в файле для команды open, была 2019-07-15.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...