Невозможно скомпилировать программу на 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 шага для решения этой проблемы:
- xcode-select —install
- установить 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