it-roy-ru.com

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

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

Хотелось бы помочь с этим.

108
Maxxx

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, поэтому терминал жалуется на отсутствие заголовочных файлов, содержащихся в нем. внутри папки "включить". В Примечания к выпуску Xcode 10. говорится, что есть пакет:

/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. После завершения загрузки установите пакет инструментов командной строки. Затем установите заголовки, как описано в разделе "Рабочее решение".

Это работало для меня на Мохаве 10.14.1. Должно быть, я скачал это раньше, но я уже забыл, когда отвечал на этот вопрос.

Обновление до Мохаве 10.14.4 и XCode 10.2

Я обновил до Mojave 10.14.4, и инструменты командной строки XCode 10.2 также были обновлены (или инструменты командной строки XCode 10.1 были обновлены до 10.2). Команда open, показанная выше, исправила отсутствующие заголовки. Могут все еще быть приключения с обновлением основного XCode до 10.2 и затем переустановкой инструментов командной строки и пакета заголовков.

184
Jonathan Leffler

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

16
Nigel

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

xcode-select --install

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

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

поскольку этот пакет не установлен XCode 10.

4
James Rinkevich

Не забудьте проверить Xcode Preferences -> Locations.

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

3
bitbrane

Были такие же проблемы, как ОП

Вопрос

кошка привет

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

лязг 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: я прокомментировал эту проблему здесь тоже.

2
mlo55

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

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

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

1
Rob

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

ФОН

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

РЕШЕНИЕ

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

tldr;

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

0
Sergio Pulgarin