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


64

Існує попереднє запитання Неможливо скласти програму C на Mac після оновлення до Mojave , і відповіді на це охопили більшість варіантів того, що йде не так.

Тепер - з понеділка 2019-10-07 - ви можете перейти на macOS Catalina 10.15. Знову під час оновлення /usr/includeкаталог було оновлено оновленням, хоча XCode 11.0 був встановлений перед оновленням (від Mojave 10.14.6) до Каталіни. Отже, компілятори, побудовані для очікування існування /usr/includeкаталогу, вже не працюють.

Основний рекомендований крок для проблем Mojave - використання команди:

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

не працює з воріт, тому що каталог /Library/Developer/CommandLineTools/Packages/не існує (тому .pkgфайл ще не відкритий).

Чи є хороший (офіційний) спосіб створення та заповнення каталогу /usr/include?


Не потрібно /usr/includeвикористовувати інструменти для розробників Apple із поточним Xcode Apple. У заголовках і таких є Xcode.app/Contents/Developer/Platforms/SomePlatform/SDKs/SomeSDK. (Зберігання заголовків у різних каталогах необхідно для підтримки декількох цільових платформ, і добре не мати a, /usr/includeщоб жодна компіляція випадково не використовувала файли з неї під час націлювання на версію, відмінну від хост-системи.) Що xcode-select -pвідображається для шляху до активний каталог розробників?
Eric Postpischil

Я створив GCC 9.2.0 (на Mojave), і він очікує, що він зможе використовувати /usr/includeдля заголовків системи. Мені б хотілося це ще використовувати, хоча я підозрюю, що Apple нарешті відкинула останні залишки сумісності із застарілими системами Unix (певною мірою написання було на стіні із системою, необхідною для роботи Мохаве '). У такому випадку мені, певно, доведеться якось відновити GCC із зазначенням поточного розташування заголовків системи - вручну базування того, як налаштувати GCC.
Джонатан Леффлер

1
@JonathanLeffler: Після оновлення до каталіни я також стикаюся з проблемою відсутності деяких файлів (наприклад, stdlib.h), які використовуються програмним пакетом R при встановленні пакетів R. Я спробував те саме, що і ви для macOS_10.14, але це вже неможливо. GCC, c ++ або що інше встановлено в / Бібліотека / Розробник / CommandLineTools / usr / bin, але R не знає. Що я можу зробити?
sebastiann

Оскільки я перейшов до Каталіни тиждень або більше тому, я став жертвою горезвісної проблеми "подвійного набору тексту" на нових клавіатурах Mac, я перейшов на zsh, передумав і вирішив повернутися назад до bash і оновлення до bash5.0, тепер я тут, бо не можу компілювати bash5.0. Мені цікаво, чи правильна відповідь на цю проблему не просто скоротити мої втрати та перейти на Arch?
DryLabRebel

Один із способів вирішити проблему - використовувати компілятори Xcode - якщо вони встановлені, вони знають, де знайти заголовки системи. Техніка CPATH у прийнятій відповіді також здається справною. Я ще не страждав на Mac від «подвійного набору тексту» (про що я знаю). У мене iPhone вирішив, що я набрав всілякі цікаві речі, але поки що торкніться деревини, мій MacBook Pro був у порядку.
Джонатан Леффлер

Відповіді:


30

Для мене додав такий шлях до CPATHвирішення проблеми:

export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

Я спробував додати CPATH; однак я все одно отримую цю саму помилку. просто намагаюся зробити простий кут << "привіт";
Джон Пеллант

1
Коли я спробував це, він працював у випадковому тесті з GCC 9.2.0, побудованим під Mojave, використовуючи те, що зараз Xcode 11.1 - дякую.
Джонатан Леффлер

Це працювало для мене з GCC 9.2.0_1
Sandeep

5
Якщо ви використовуєте інструменти командного рядка замість Xcode.app, використовуйтеexport CPATH=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/
nalzok

Один дивний вигляд - у мене якийсь код запустився,#include <stdlib.h>а потім не вдалося скласти скарги на:In file included from …/usr/include/sys/wait.h:110, —— from …/usr/include/stdlib.h:66, —— from bm.c:27: —— …/usr/include/sys/resource.h:443:9: error: no previous prototype for ‘getiopolicy_np’ [-Werror=missing-prototypes] —— 443 | int getiopolicy_np(int, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);—— Однак, коли я додаю#include <ctype.h>раніше#include <stdlib.h>, він складається. Все ще розробляємо, що це означає, і як з цим впоратися автоматично.
Джонатан Леффлер

48

Перш ніж продовжити, обов’язково встановіть інструменти командного рядка xcode.

xcode-select --install

Власне, ви можете це зробити! Насправді всі заголовки C знаходяться тут у цій папці:

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/

Нам просто потрібно створити симпосилання для всіх файлів заголовків у цій папці:

/usr/local/include/

Це працювало для мене! наступний командний рядок вирішить усі проблеми:

sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/

Ви отримаєте попередження. Деякі заголовки вже існують, наприклад, такі:

ln: /usr/local/include//tcl.h: File exists
ln: /usr/local/include//tclDecls.h: File exists
ln: /usr/local/include//tclPlatDecls.h: File exists
ln: /usr/local/include//tclTomMath.h: File exists
ln: /usr/local/include//tclTomMathDecls.h: File exists
ln: /usr/local/include//tk.h: File exists
ln: /usr/local/include//tkDecls.h: File exists
ln: /usr/local/include//tkPlatDecls.h: File exists

абсолютно нормально ігнорувати. це все.


1
Так, я вважаю, що це можливо - дякую за пропозицію. Це не відповідає моїм вимогам до "гігієни системи" (наприклад, ці дублікати заголовків), а /usr/local/ієрархія каталогів призначена для місцевого програмного забезпечення, а не для системного програмного забезпечення. IMO, заголовки повинні бути, /usr/includeі Apple просто болить.
Джонатан Леффлер

1
Є спосіб обійти, може попрацювати, можна спробувати. У режимі відновлення відключіть SIP, а потім встановіть /режим запису. Потім заселіть /usr/includeпапку. Це тому, що в 10.15 система підключається як режим лише для читання. не відключаючи SIP, ви не зможете змонтувати гучність системи.
Рой

@KomolNathRoy: дякую за підказки. Це працювало для мене дуже добре. Нарешті я міг би встановити всі потрібні пакети в статистичне програмне забезпечення R, оскільки жоден R не знаходить все необхідне для встановлення.
sebastiann

7
Це рішення спрацювало для мене в
Метью Варварі

2
Відключення SIP не є прийнятним для мене, навіть як тимчасовий захід.
Джонатан Леффлер

22

TL; DR

Схоже, Apple розглядає /usr/includeяк щось, що пройшло шлях додо - воно вимерло, - а може, це як папуга Монті Пітона .

Використання GCC, що надається Apple (насправді це Clang за будь-яким іншим іменем, як показує інформація про версію) або Clang дозволяє уникнути проблем. І те, /usr/bin/gccі нижче /usr/bin/clangзнайдемо системні бібліотеки чотирьох рівнів каталогів:

/Applications/Xcode.app/Contents/Developer/Platforms/…

Якщо ви будуєте свій власний GCC або інший компілятор, вам (ймовірно) потрібно буде налаштувати його для пошуку системних бібліотек під каталогом додатків Xcode.

Розвідки

Відразу після оновлення я запустив XCode 11.0. Він хотів встановити кілька додаткових компонентів, тому я дозволив це зробити. Однак це не відновилося, /usr/includeані каталог під /Library.

Один з інших порад в попередньому питанні полягав у виконанні:

xcode-select --install

При цьому він стверджував , що він завантажував утиліти командного рядка, і це гарантувало , що /usr/bin/gccі /usr/bin/clangт.д. присутні. Це корисний крок (хоча я не остаточно перевіряв, чи були вони раніше).

$ /usr/bin/gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.8)
Target: x86_64-apple-darwin19.0.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$

Використовуючи /usr/bin/gcc, тепер можна компілювати програми:

$ make CC=/usr/bin/gcc al
co  RCS/al.c,v al.c
RCS/al.c,v  -->  al.c
revision 1.7
done
/usr/bin/gcc -I/Users/jleffler/inc -g -O3 -std=c11 -pedantic -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith  -Wold-style-definition -Wcast-qual -Wstrict-prototypes -DHAVE_MEMMEM -DHAVE_STRNDUP -DHAVE_STRNLEN  -DHAVE_GETDELIM   -o al al.c -L/Users/jleffler/lib/64  -ljl
$

Однак, /usr/includeвсе ще відсутня. Нижче є каталог /Library:

$ ls /Library/Developer
CommandLineTools  PrivateFrameworks
$ ls /Library/Developer/CommandLineTools
Library SDKs    usr
$ ls /Library/Developer/CommandLineTools/SDKs
MacOSX.sdk      MacOSX10.14.sdk MacOSX10.15.sdk
$ ls /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/
Entitlements.plist SDKSettings.json   System
Library            SDKSettings.plist  usr
$

Ні каталог, Systemні Libraryкаталог не містять нічого дуже перспективного.

Коли все інше не вдається, прочитайте посібник

Наступний крок - знайдіть і прочитайте примітки до випуску:

Там немає інформації, яка стосується цього. Тож існує ймовірність (AFAICS, лише через годину чи дві зусилля), що Apple більше не підтримує, /usr/includeхоча вона все ще має повністю завантажений /usr/lib(ні/lib але ).

Час перевірити чергову компіляцію з -vдоданою опцією GCC (у використаному файлом makefile, UFLAGSдодавання додає параметр до командного рядка компілятора C):

$ make UFLAGS=-v CC=/usr/bin/gcc ww
co  RCS/ww.c,v ww.c
RCS/ww.c,v  -->  ww.c
revision 4.9
done
/usr/bin/gcc -I/Users/jleffler/inc -g -O3 -std=c11 -pedantic -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith  -Wold-style-definition -Wcast-qual -Wstrict-prototypes -DHAVE_MEMMEM -DHAVE_STRNDUP -DHAVE_STRNLEN  -DHAVE_GETDELIM -v  -o ww ww.c -L/Users/jleffler/lib/64  -ljl
Apple clang version 11.0.0 (clang-1100.0.33.8)
Target: x86_64-apple-darwin19.0.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.15.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -disable-free -disable-llvm-verifier -discard-value-names -main-file-name ww.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-sdk-version=10.15 -target-cpu penryn -dwarf-column-info -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 512.4 -v -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -I /Users/jleffler/inc -D HAVE_MEMMEM -D HAVE_STRNDUP -D HAVE_STRNLEN -D HAVE_GETDELIM -I/usr/local/include -O3 -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith -Wold-style-definition -Wcast-qual -Wstrict-prototypes -Wno-framework-include-private-from-public -Wno-atimport-in-framework-header -Wno-extra-semi-stmt -Wno-quoted-include-in-framework-header -pedantic -std=c11 -fdebug-compilation-dir /Users/jleffler/src/cmd -ferror-limit 19 -fmessage-length 110 -stack-protector 1 -fstack-check -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.15.0 -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -vectorize-slp -o /var/folders/77/zx9nk6dn7_dg4xd4stvt42v00000gn/T/ww-4cb85b.o -x c ww.c
clang -cc1 version 11.0.0 (clang-1100.0.33.8) default target x86_64-apple-darwin19.0.0
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /Users/jleffler/inc
 /usr/local/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -macosx_version_min 10.15.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -o ww -L/Users/jleffler/lib/64 /var/folders/77/zx9nk6dn7_dg4xd4stvt42v00000gn/T/ww-4cb85b.o -ljl -L/usr/local/lib -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dsymutil" -o ww.dSYM ww
$

Ключова інформація у цьому пуху даних:

-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk

Це фактично каталог «root» для компіляції, тому під цим каталогом мають бути підкаталоги для usrта usr/include:

$ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
Entitlements.plist SDKSettings.json   System
Library            SDKSettings.plist  usr
$ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr
bin     include lib     libexec share
$ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
AppleTextureEncoder.h  dns_util.h             memory.h               simd
AssertMacros.h         dtrace.h               menu.h                 slapi-plugin.h
Availability.h         editline               miscfs                 spawn.h
AvailabilityInternal.h err.h                  module.modulemap       sqlite3.h
AvailabilityMacros.h   errno.h                monetary.h             sqlite3ext.h
AvailabilityVersions.h eti.h                  monitor.h              stab.h
lots more lines
dirent.h               mach-o                 security               xcselect.h
disktab.h              mach_debug             semaphore.h            xlocale
dispatch               machine                servers                xlocale.h
dlfcn.h                malloc                 setjmp.h               xpc
dns.h                  math.h                 sgtty.h                zconf.h
dns_sd.h               membership.h           signal.h               zlib.h
$

Це свідчить про те, що назва каталогів, що займає довгу милю, і зовсім не запам'ятовує, містить стандартні заголовки C і POSIX, а також додаткові додатки для Apple.

Попередній /usr/local/каталог видається недоторканим; попередження про те, що usr/local/includeне існує під назвою, -isysrootdirє нешкідливим (і не видно без -vопції).


На жаль, не вдалося виконати вашу пропозицію. Я отримую таку ж помилку з оновленням каталіни. Завдяки vscode я не міг створити додатки C ++ і wchar.hне виявив помилки. Я спробував включити цю папку -I / Applications / Xcode.app / Contents / Developer / Platforms / MacOSX.platform / Developer / SDKs / MacOSX.sdk / usr /, включити та iam отримати інші помилки, як-от щодо відсутніх символів для "error: no member з ім'ям "isless" в глобальному просторі імен "
user3279954

Увімкнено --verboseу файлі завдань і зауважив, що проти коду дивиться /usr/include/c++/v1/папку, якої зараз більше немає у каталіні. Додано наступну папку, а також вищевказаний sdk, і тепер вона працює. "-I / Бібліотека / Developer / CommandLineTools / usr / include / c ++ / v1 /",
user3279954

@trojanfoe - Я віддаю перевагу SCCS, але в 1999 році не було зрозуміло, чи буде SCCS працювати нормально після Y2K (і не було хорошої реалізованої програми SCCS з відкритим кодом), тому я неохоче перейшов на RCS.
Джонатан Леффлер

Нічого собі: D Так у будь-якому випадку проблема з /usr/includeвідсутності? Він завжди неявно входив до складу компілятора, включаючи шлях, тому користувачеві ніколи не потрібно було знати про нього (крім того, коли ви намагалися знайти, де щось було оголошено). Clang робить те ж саме зі своїм SDK шляхом, Xcode.appтому чистий ефект такий же.
trojanfoe

1
@trojanfoe: Одне питання (моя основна проблема) з відсутньою /usr/includeAWOL полягає в тому, що якщо ви створили свій власний GCC з джерела, він, ймовірно, був складений для пошуку заголовків системи, /usr/includeі тому компіляції не вдається. Я хочу використовувати найсвіжіші GCC, а також Clang. Я із задоволенням використовую Apple Clang, але я не радий використовувати Apple Clang маскування під GCC - це не те саме, що GCC. Я ще не розробив рецепт побудови GCC з переміщеними заголовками системи. (Я думаю, що --with-native-system-header-dir="${XCODE_HDR}"це частина відповіді; це не
Джонатан Леффлер

7

Встановіть наступні неявні Makeзмінні, щоб вказати, де зараз розташовані заголовки для інструментів командного рядка Xcode (Xcode CLI):

export CFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CCFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CXXFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CPPFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk

Цей -isysrootпараметр оновлює розташування кореневих файлів подалі від кореневого каталогу системи /.

Таким чином, це забезпечує те, що загальні /usr/*файли будуть знайдені на новому місці.

Тобто файли в /Library/Developer/CommandLineTools/SDKs/MacOSX.sdkтепер знайдені. Ці файли:

Entitlements.plist 
Library
SDKSettings.json
SDKSettings.plist
System
usr

У моїх файлах (і в більшості інших файлів, які я бачу) CFLAGSє набагато складніше, ніж один варіант - -isysrootваріант повинен бути "на додаток" до інших налаштувань (безліч інших налаштувань). Тут може бути ядро ​​ідеї (передайте -isysrootпараметр і розташування внизу /Library/Developer/…), але воно потребує полірування, перш ніж воно буде готове до прайм-тайму.
Джонатан Леффлер

@JonathanLeffler Використання export CFLAGS+=-isysroot ...замість цього буде працювати для цього випадку використання. Це єдине рішення, яке працювало для мене (у Mojave (10.14) з SDK Catalina (10.15). У мене немає .pkgфайлу, про який всі говорять, навіть якщо мої інструменти XCode та командного рядка оновлені).
Norswap

@Norswap - існує величезна різниця між використанням CFLAGS=…та CFLAGS+=….
Джонатан Леффлер

@JonathanLeffler погодився. Я оновив відповідь, яку потрібно використовувати +=. Дякуємо @Norswap.
безшерстий

1
Крім того, я зрозумів, що встановлення SDKROOTна одне значення sdk ( /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk) буде добре працювати і для мене!
Norswap

4

Я новачок із компілятором C ++ для R в OSX, і у мене виникла та сама проблема, що C ++ не зміг знайти заголовок після оновлення ОС ( відсутня математика.h хоча вона там була ). Я дотримувався вказівок https://thecoatlessprofessor.com/programming/cpp/r-compiler-tools-for-rcpp-on-macos/, але нічого не змінилося.

Нарешті, це працювало для мене після того, як я перевстановив Xcode CLI

xcode-select --install

а потім змінити прапори на Var, як запропонував @Coatless:

export CFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CCFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CXXFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CPPFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk

1

У моєму випадку, здавалося, у мене є, llvmа gccтакож встановлено за допомогою домашньої мови. Коли я видалив їх, і таким чином повністю покладався на клавіш macOS, він міг знайти заголовки, і компіляція знову запрацювала.


0

Запитання apue.h все ще відсутнє в моєму /usr/local/includeпісля відповіді Komol Nath Roy в цьому питанні.

Я завантажив залежність вручну з git і помістив її /usr/local/include


Заголовок apue.hнадходить від W Richard Stevens, Stephen A Rago Advanced Programming in Unix Environment, 3rd Edn 2013. AFAIK, Apple ніколи не забезпечувався як системний заголовок. (Це не /usr/includeна моїй машині, яка все ще працює Mojave.) Якщо вона колись була встановлена /usr/include, вона, ймовірно, створена вручну, а не надається Apple. Як такий, він повинен був бути встановлений /usr/local/includeраніше.
Джонатан Леффлер

Вибачте моє наївне питання, але я щойно перейшов на C ++ на цьому тижні. Чи залежно / заголовки керуються вручну в c ++? якщо так, то чи варто вводити всі зазначені залежності / заголовки /usr/include?
Метью Варвару

1
Q1: Більше чи менше. Це трохи залежить від того, що ви маєте на увазі, але вам доведеться турбуватися про залежності та заголовки для C або C ++, якщо заголовки не є стандартними для машин (ів), з якими ви працюєте. Тоді виникає питання - що стандартно? А найкраща відповідь, яку можна дати - це "це залежить", і це залежить від безлічі факторів - у тому числі "платформа" (O / S, компілятор). Q2 - "Ні, зазвичай нічого не потрібно класти /usr/include" - використовуйте /usr/local/includeзамість цього. Як правило, найбезпечніше залишитись /usr/includeі /usr/libпоодинці, а /usr/localзамість цього додати матеріал .
Джонатан Леффлер

0

Рішення було простіше, ніж я думав. Встановити clang / llvm.

brew install llvm

Тоді нам потрібно створити посилання самостійно.

for f in /usr/local/Cellar/llvm/9.0.0_1/bin/clang*; do ln -s ${f} /usr/local/bin/"${f##*/}"; done

І

ln -s /usr/local/Cellar/llvm/9.0.0_1/include/c++ /usr/local/include/c++

Залежно від версії llvm, змініть вищевказані команди.

Тепер ви можете компілювати програми C ++, не передаючи спеціальні прапори.

clang++ hello.cpp

0

Я спробував 1) зв’язати вручну 2) варити встановити llvm, але вони не спрацювали.

Нарешті, це спрацювало для мене: https://gitmemory.com/issue/pytorch/pytorch/31190/565153503

Встановивши наступні середовища:

export CC=clang
export CXX=clang++
export MACOSX_DEPLOYMENT_TARGET=10.9

0

Для мене це працює добре так:

1. xcode-select --install

2. sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/

3. export SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.