Неможливо компілювати програму C на Mac після оновлення до Mojave


159

Я використовував команду gcc на терміналі для компіляції програм C, але раптом після оновлення ОС моєї 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після того, як я почав копіювати та вставляти деякі команди з інших ресурсів, щоб вирішити цю проблему.

Хотіли б трохи допомогти в цьому.


5
Ви можете перевірити шляхи пошуку gcc за допомогоюecho "#include <a.h>" | gcc -v -x c -
Метт,

2
Дуже часто xocde-select --install- правильне рішення. До кого / що ви оновили? Мохаве 10,14? Який XCode ви встановили? 10.0 чи інша версія?
Джонатан Леффлер

39
@JonathanLeffler Я знайшов спосіб. Якщо ми використовуємо XCode 10, ви помітите, що якщо ви перейдете до / usr у Finder, ви більше не побачите папку під назвою "включити", тому термінал скаржиться на відсутність файлів заголовків, які містяться всередині папка "включити". У цій заяві про випуск developer.apple.com/documentation/xcode_release_notes/… (ви переходите до /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg та запускаєте цей пакет, щоб встановити папку "включати"). Тоді вам слід добре піти.
Maxxx

1
Коли все інше не вдається, прочитайте посібник! Або примітки до випуску. Мене не страшно дивує те, що Apple хоче повернути спину спадщині Unix. Я розчарований. Якщо вони обережні, вони можуть мене відігнати. Спасибі за інформацію; Я буду експериментувати з цим пізніше (після того, як зловити кілька годин заплющеним оком).
Джонатан Леффлер

16
Встановивши пакет ( open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgу командному рядку), я /usr/includeзнову, і мій GCC 8.2.0 працює ще раз. Дякую за покажчик; молодець на її пошуку. Я пропоную вам написати відповідь, оскільки, ймовірно, будуть проблеми з іншими людьми.
Джонатан Леффлер

Відповіді:


264

TL; DR

Переконайтесь, що ви завантажили останній пакет "Інструменти командного рядка" та запустіть його з терміналу (командного рядка):

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

Щоб отримати докладнішу інформацію про Catalina, див. Неможливо скласти програму C на Mac після оновлення до Catalina 10.15 .


Витяг напівзв’язної відповіді з досить обширних коментарів ...

Преамбула

Дуже часто xcode-select --installбуло правильним рішенням, але цього часу, здається, це не допоможе. Ви спробували запустити основний інтерфейс графічного інтерфейсу Xcode? Він може встановити додаткове програмне забезпечення для вас та очистити. Я зробив це після встановлення 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, повернення), і він сказав, що потрібно встановити ще трохи програмного забезпечення, але все ще немає /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, ви більше не побачите папку під назвою "включити", тому термінал скаржиться на відсутність файлів заголовків, які містяться всередині папку "включити". У примітках до випуску 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. Я, мабуть, завантажував це раніше, але до часу відповіді на це питання я забув.

Оновіть до Mojave 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 (для Mojave 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 також доступний (System Preferences Update Оновлення програмного забезпечення), а також пакет IIRC утиліти Command Line (завантажений та встановлений автоматично). Встановлення o / s оновлення ще раз знищило /usr/include, але openкоманда вгорі відповіді знову відновила його. Дата, яку я мав у файлі для openкоманди, - 2019-07-15.

Оновлення до XCode 11.0 (для Каталіни 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) дозволив мені запустити компілятор. Відтоді я запускаю програму для установки додаткових необхідних їй компонентів; все ще немає проблем. Залишається побачити, що станеться, коли я переходжу на саму Каталіну - але мої машини macOS Mojave 10.14.6 на даний момент обоє в порядку (2019-09-24).


4
ах спасибі за написання цього. Цінується. Ура!
Maxxx

6
Вирішили це за мене !!! Дуже дякую, що знайшли час, щоб написати це!
будеkatude

8
ГРУП !!! Речі знову змінилися з оновленням 10.14.1 - або, принаймні, вони, здається, знову змінилися. Мені здається, що оновлення o / s вирвалось/usr/include, а пакет, зазначений у відповіді вище, відсутній у,/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgіxcode-select --installговорить про те, що інструменти командного рядка наразі недоступні.
Джонатан Леффлер

15
Зраблює Apple. Вони не можуть просто залишити речі, які працюють, вони повинні рухати речі, додавати кроки і створювати рівномірність.

7
Сподіваючись, що пошукові системи знайдуть цю відповідь, наведені вище вказівки вирішили питання під fatal error: bits/ctype_base.h: No such file or directory: #include <bits/ctype_base.h>час компіляції GCC 7.4.0, використовуючи libstdc ++ на Mojave для мене
Адам Ліндберг

30

Спробувавши кожну відповідь, яку я міг знайти тут та в Інтернеті, я все-таки отримував помилки щодо деяких відсутніх заголовків. При спробі компілювати 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 це виправлено.


Нічого не працювало, але це все зробило. Велике спасибі!!
Фелікс

2
wickedsickbrothnx
Девіс Дулін

23

Коли ти

  • оновлено до Mojave 10.14.6
  • ваш /usr/includeзнову було видалено
  • пакет згадується в @ Джонатан-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.


Відмінно! Після ваших кроків, macOS_SDK_headers_for_macOS_10.14.pkgотримати доступ, і команда open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgзробила те, що потрібно було зробити. Завдяки мільйонів!!
Бруно Амброзіо

3
Для мене працювало наступне: export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include
rbieber

Дякую! Я застряг, але це справді працювало для мене з Mojave 10.4.6 та XCode 11.3.1
Simeon G

Щоразу, коли Apple випускала оновлення системи, я повинен вирішити цю проблему з Clion по-різному.
igonejack

12

Проблема полягає в тому, що Xcode, особливо Xcode 10.x, не встановив усе, тому переконайтеся, що встановлені інструменти командного рядка, введіть це в термінальну оболонку:

xcode-select - встановіть

також запустіть Xcode і переконайтеся, що встановлена ​​необхідна установка (вам потрібно запропонувати, якщо її немає.) І оскільки Xcode 10 не встановлює повний SDK для Mac OS, запустіть інсталятор на

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

оскільки цей пакет не встановлений Xcode 10.


1
Це врятувало мене. Дуже дякую!
Демвен Вейр

7

Я знайшов чудове рішення та пояснення в цьому коментарі GitHub . Хитрість:

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

Зробив роботу.


5

ПРИМІТКА: Далі, ймовірно, є дуже контекстуальним та обмеженим часом перед переключенням / загальною доступністю 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

btw, якщо я заходжу в цей каталог sdk, я знаходжу:

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

РЕЗУЛЬТАТ:

pip install psycopg2 працює.

Примітка: фактична команда установки pip не посилалася на MacOSX10.14.sdk , що надійшла пізніше, можливо, механізмом інсталяції Python, який переглядав версію ОС.


Що pipви використовуєте? Я думаю, що це може бути ключовою проблемою.
Франклін Юй

3

Обов’язково перевірте налаштування Xcode -> Locations.

Інструменти командного рядка, які я вибрав, були для попередньої версії Xcode (8.2.1 замість 10.1)


2

Мав подібні проблеми, як з ОП

Проблема

кішка привіт.c

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

кланг привіт.c

/usr/local/include/stdint.h:2:10: error: #include nested too deeply
etc...

Спроба виправити

Я встановив останню версію XCode, проте примітки до випуску вказали, що файл, згаданий у попередньому виправленні, від Jonathan тут, більше не доступний.

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/isissue/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

Після запуску сценаріїв випуску файлу include не було. nb: Я також прокоментував це питання і тут .


1

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


1

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


0

Як зазначає Джонатан Леффлер вище, файлу macOS_SDK_headers.pkg більше немає в Xcode 10.1.

Що для мене працювало - це робити, brew upgradeі оновлення gcc та / або будь-чого іншого, що робиться домашньою програмою, було вирішено проблеми шляху.



0

У мене була така ж проблема з Golang (налагодження з Goland) після міграції. Єдине (смішне), що допомогло - перейменування наступної папки:

sudo mv /usr/local/include /usr/local/old_include

Мабуть, це пов’язано зі старими файлами, які встановлено і тепер зламано.


-1

@JL Пейрет прав!

якщо ви макос 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


Чи не повинен це бути коментар?
Франклін Юй
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.