Не могу скомпилировать программу 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
после того, как я начал копировать и вставлять некоторые команды из других ресурсов для решения этой проблемы.
Хотелось бы помочь с этим.
16 ответов
Извлечение полусвязного ответа из довольно обширных комментариев...
преамбула
Очень часто, 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
не находит заголовки либо.
Я сделал немного сравнения, и моя машина Мохаве не имеет /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 (command-space, xcode, return) и сказал, что нужно установить еще немного программного обеспечения, но все еще нет /usr/include
, Но я могу скомпилировать с /usr/bin/clang
а также /usr/bin/gcc
- и -v
вариант предполагает, что они используют
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
Рабочий раствор
Я нашел способ. Если мы используем 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, чтобы получить возможность загрузки. Когда вы закончите загрузку, установите пакет утилит командной строки. Затем установите заголовки, как описано в разделе "Рабочее решение".
Это работало для меня на Мохаве 10.14.1. Должно быть, я скачал это раньше, но я уже забыл, когда отвечал на этот вопрос.
Перепробовав каждый ответ, который я смог найти здесь и в Интернете, я все еще получал ошибки для некоторых пропущенных заголовков. При попытке скомпилировать 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 исправило это.
Когда ты
- обновлено до
Mojave 10.14.6
- твой
/usr/include
был удален снова - пакет, упомянутый в ответе @Jonathan-lefflers, больше не существует
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
.
Проблема в том, что 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.
Я нашел отличное решение и объяснение в этом комментарии GitHub. Трюк:
make SDKROOT=`xcrun --show-sdk-path` MACOSX_DEPLOYMENT_TARGET=
Сделал работу.
ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk'
может вам помочь. Это устранило мою проблему.
ПРИМЕЧАНИЕ. Следующее, вероятно, сильно зависит от контекста и ограничено по времени до перехода / общедоступности 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
- установлен xcode
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
По-прежнему та же ошибка на stdio.h.
который существует в нескольких местах:
(venv) jluc@bemyerp$ 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's usually missing.
but I have it.
/usr/include/sys/stdio.h
/usr/include/xlocale/_stdio.h
Итак, перейдем в этот первый каталог clang
жалуется и посмотрите:
(venv) jluc@gotchas$ cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
(venv) jluc@SDKs$ 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 не ссылалась на MacOSX10.14.sdk, который появился позже, возможно, из-за механизма установки Python, анализирующего версию ОС.
Не забудьте проверить Xcode Preferences -> Locations.
Инструменты командной строки, которые я выбрал, были для предыдущей версии Xcode (8.2.1 вместо 10.1)
Были такие же проблемы, как ОП
вопрос
кошка привет
#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
я нашел это 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: я прокомментировал эту проблему и здесь.
В Big Sur 11.5.2 с XCode 12.5.1 это может помочь:
sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk
CMake сказал мне, что
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk
не существовало, и я решил сделать символическую ссылку.
PS полное удаление каталога CommandLineTools, запуск установки, предварительная настройка
brew upgrade
и т. д. раньше не помогали.
Я перепробовал почти все опубликованные решения, и у меня ничего не помогло. Я использую Mojave OS (10.14.6) и то, что в итоге сработало для меня (после удаления и повторной установки заголовков Xcode, CLT и SDK):
- Установите Clang v8 с https://cran.r-project.org/bin/macosx/tools/
- Измените следующие строки из файла ~/.R/Makevars
CC=/usr/local/opt/llvm/bin/clang -fopenmp
CXX=/usr/local/opt/llvm/bin/clang++
с
CC=/usr/local/clang8/bin/clang -fopenmp
CXX=/usr/local/clang8/bin/clang++
Теперь пакеты R, которые полагаются на компиляторы C, устанавливаются успешно.
У меня была эта проблема, и ничего не получалось. Я побежал 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, попробуйте очистить все и установить версию, прежде чем попробовать решения, которые работают для других людей.
зависимость apue.h все еще отсутствовала в моем/usr/local/include
после того, как мне удалось исправить эту проблему в Mac OS Catalina, следуя инструкциям этого ответа
Я загрузил зависимость вручную из git и поместил ее в/usr/local/include
Как отмечает выше Джонатан Леффлер, файл macOS_SDK_headers.pkg больше не существует в Xcode 10.1.
То, что работало для меня, было сделать brew upgrade
и обновления gcc и / или что-либо еще, сделанное homebrew за кулисами, решали проблемы пути.
У меня была такая же проблема с Golang (отладка с Goland) после миграции. Единственное (нелепое), что помогло, - это переименование следующей папки:
sudo mv /usr/local/include /usr/local/old_include
По-видимому, это связано со старыми файлами, которые установил homebrew и теперь сломан.
@JL Пейрет прав!
если у вас macos 10.14.6 Mojave, Xcode 11.0+
тогда
cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
sudo ln -s MacOSX.sdk/ MacOSX10.14.sdk