Не могу скомпилировать программу 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

Рабочий раствор

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

Это работало для меня на Мохаве 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):

  1. Установите Clang v8 с https://cran.r-project.org/bin/macosx/tools/
  2. Измените следующие строки из файла ~/.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

Другие вопросы по тегам