Невозможно скомпилировать программу на Mac после обновления до Mojave

Я использовал команду gcc на терминале для компиляции программ на C, но внезапно, после обновления моей Mac OS (до 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 и он уже был установлен, поэтому он не xcode-select --install проблему, с которой я сейчас сталкиваюсь. Я предполагаю, что путь запутан, так как кажется, что он не может найти gcc после того, как я начал копировать и вставлять некоторые команды из других ресурсов для решения этой проблемы.

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

Ответы

Ответ 1

TL; DR

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

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

Для получения дополнительной информации о Catalina см. Невозможно скомпилировать программу C на Mac после обновления до Catalina 10.15.


Extracting a semi-coherent answer from rather extensive comments…

Преамбула

Очень часто xcode-select --install было правильным решением, но в этот раз, похоже, это не помогло. Вы пытались запустить основной интерфейс Xcode GUI? Это может установить дополнительное программное обеспечение для вас и очистить. Я сделал это после установки Xcode 10.0, но неделю или больше назад, задолго до обновления до Мохаве.

Я заметил, что если ваш 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 также не находит заголовки.

Я провел небольшое сравнение, и моя машина в Мохаве вообще не имеет /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).

Ответ 2

Перепробовав каждый ответ, который я смог найти здесь и в Интернете, я все еще получал ошибки для некоторых пропущенных заголовков. Когда я пытался скомпилировать pyRFR, я получал сообщения об отсутствии stdexcept, который, очевидно, не был установлен в /usr/include с другими заголовками. Однако я нашел, где он скрывался в Мохаве, и добавил это в конец моего файла ~/.bash_profile:

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

Сделав это, я теперь могу скомпилировать pyRFR и другие программы на C/c++. Согласно echo | gcc -E -Wp,-v - echo | gcc -E -Wp,-v -, gcc искал в старых местах эти заголовки (без /c++/v1), но не новое местоположение, поэтому добавление этого в CFLAGS исправило его.

Ответ 3

Проблема в том, что 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

Когда ты

  • обновлено до Mojave 10.14.6
  • Ваш /usr/include был снова удален
  • пакет, упомянутый в @Jonathan-lefflers answer, больше не существует 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/CommandLineTools и переустановите его xcode-select --install.

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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

вопрос

кошка привет

#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/ папке /usr/local/.

Поэтому для исправления я использовал команду, предоставленную пользователем HowCrazy, чтобы найти неиспользуемые включения и переместить их во временную папку.

Повторяется здесь...

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

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

Ответ 8

НОТА: Нижеследующее, скорее всего, очень контекстуально и ограничено по времени до переключения/общей доступности Macos Catalina 10.15. Новый ноутбук. Я пишу это 1 октября 2019 года.

Я считаю, что именно эти обстоятельства вызвали у меня проблемы со сборкой. Они могут не применяться в большинстве других случаев.

Контекст:

  • macos 10.14.6 Mojave, 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
  • установленный код
  • open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Все та же ошибка на stdio.h.

который существует в нескольких местах:

(venv) [email protected]$ 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 usually missing.
                            but I have it.
/usr/include/sys/stdio.h
/usr/include/xlocale/_stdio.h

Итак, давайте перейдем в тот первый каталог, на который жалуется clang, и посмотрим:

(venv) [email protected]$ cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
(venv) [email protected]$ 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 .

Ха, у нас есть символическая ссылка для 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 и уже думает, что они на Каталине. Поскольку это новый Mac, старая конфигурация для 10.14 не на месте.

ИСПРАВЛЕНИЕ:

Пусть символическая ссылка 10.14 так же, как 10.15:

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

Кстати, если я иду в этот каталог SDK, я нахожу:

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

РЕЗУЛЬТАТ:

pip install psycopg2 работает.

Примечание. Фактическая команда pip install не ссылалась на MacOSX10.14.sdk, которая появилась позднее, возможно, из-за механизма установки Python, анализирующего версию ОС.

Ответ 9

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

tldr;

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

Ответ 10

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

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

Ответ 11

Всего 2 шага для решения этой проблемы:

  1. xcode-select —install
  2. установить pkg: /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Ответ 12

apue.h зависимость все еще отсутствовала в моем /usr/local/include после того, как мне удалось исправить эту проблему в Mac OS Catalina, следуя инструкциям этого ответа У меня была дополнительная проблема - там, где ее не было.

Я загрузил зависимость вручную из git и поместил ее /usr/local/include/apue.h