Не могу скомпилировать 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) до Catalina. Следовательно, компиляторы, рассчитанные на то, что /usr/includeкаталог существует, больше не работают.

Основной рекомендуемый шаг для проблем Мохаве - использование команды:

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. (Хранение заголовков в разных каталогах необходимо для поддержки нескольких целевых платформ, и хорошо не иметь /usr/includeгарантии, что никакие компиляции не будут случайно использовать файлы из него при нацеливании на версию, отличную от хост-системы.) Что xcode-select -pпоказывает путь к активный каталог разработчиков?
Эрик Постпишил
Я построил GCC 9.2.0 (на Мохаве), и он ожидает, что сможет использовать /usr/includeдля системных заголовков. Я хотел бы иметь возможность использовать это все еще, хотя я подозреваю, что Apple, наконец, выбросила последние остатки совместимости с унаследованными системами Unix (в некоторой степени, запись была на стене с системой, необходимой для работы Мохаве) «). В этом случае мне, вероятно, придется пересобрать GCC, указав текущее местоположение системных заголовков, - ручная фиксация того, как настроить GCC.
Джонатан Леффлер
1
@JonathanLeffler: После обновления до catalina я также столкнулся с проблемой отсутствия некоторых файлов (например, stdlib.h), которые используются программным пакетом R при установке пакетов R. Я попробовал то же самое, что и вы, для macOS_10.14, но это больше невозможно. GCC, c ++ или что-либо еще установлено в / Library / Developer / CommandLineTools / usr / bin, но R не знает. Что я могу сделать?
sebastiann
С тех пор, как я перешел на Catalina примерно неделю назад, я стал жертвой пресловутой проблемы «двойной печати» на новых клавиатурах Mac, я переключился на zsh, передумал и решил вернуться к bash и обновиться до bash5.0, теперь я здесь, потому что не могу скомпилировать bash5.0. Мне интересно, если правильный ответ на эту проблему не просто сократить мои потери и переключиться на Арка?
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; Тем не менее, я все еще получаю эту же ошибку. просто пытаюсь сделать простой cout << "привет";
Джон Пеллант
1
Когда я попробовал это, он работал в случайном тесте с GCC 9.2.0, созданным под Mojave с использованием того, что сейчас Xcode 11.1 - спасибо.
Джонатан Леффлер
Это сработало для меня с GCC 9.2.0_1
Sandeep
6
Если вы используете инструменты командной строки вместо 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/иерархия каталогов предназначена для локального программного обеспечения, а не для системного программного обеспечения. ИМО, заголовки должны быть, /usr/includeа Apple - просто боль.
Джонатан Леффлер
1
Есть способ обойти, может сработать, можно попробовать. В режиме восстановления отключите SIP, а затем подключите его /в режиме записи. Затем заполните /usr/includeпапку. Это потому, что в 10.15 система монтируется как режим только для чтения. без отключения SIP вы не сможете смонтировать системный том.
Рой
@KomolNathRoy: спасибо за ваши советы. Это сработало для меня очень хорошо. Наконец-то я смог установить все нужные мне пакеты в статистическом программном обеспечении R, потому что ни один R не нашел всего, что нужно для установки.
sebastiann
7
Это решение работало для меня на Каталине 10.15
Мэтью Барбара
2
Отключение SIP для меня неприемлемо, даже как временная мера.
Джонатан Леффлер
22

TL; DR

Похоже, что Apple считает /usr/includeчто-то, что пошло по пути додо - оно вымерло - или, возможно, это как Попугай Монти Пайтона .

Использование предоставленного Apple GCC (на самом деле это 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 (в используемом мной make-файле настройка 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

Это по сути корневой каталог для компиляции, поэтому в нем должны быть подкаталоги для 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ошибку not found. Я попытался включить эту папку -I / Applications / Xcode.app / Contents / Developer / Platforms / MacOSX.platform / Developer / SDKs / MacOSX.sdk / usr / include и получить другие ошибки, например о пропущенных символах для «error: no member» с именем 'isless' в глобальном пространстве имен "
user3279954
Включен --verboseв файле задач и заметил, что vs code просматривает /usr/include/c++/v1/папку, которой больше нет в catalina. Также добавили следующую папку вместе с вышеупомянутым sdk include и теперь она работает. "-I / Библиотека / Разработчик / 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 (CLI Xcode):

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
пиджака
источник
В моих make-файлах (и в большинстве других make-файлов, которые я вижу) CFLAGSэто намного сложнее, чем один единственный параметр - -isysrootпараметр должен быть «в дополнение к» другим настройкам (множество других настроек). Здесь может быть ядро ​​идеи (передайте -isysrootопцию и расположение под ней /Library/Developer/…), но для ее подготовки к прайм-тайму потребуется некоторая полировка.
Джонатан Леффлер
@JonathanLeffler Использование export CFLAGS+=-isysroot ...вместо этого будет работать для этого варианта использования. Это единственное решение, которое работало для меня (в Mojave (10.14) с Catalina (10.15) SDK. У меня нет .pkgфайла, о котором все говорят, хотя мой XCode и инструменты командной строки обновлены).
Norswap
@ Norswap - есть огромная разница между использованием CFLAGS=…и CFLAGS+=….
Джонатан Леффлер
@JonathanLeffler согласился. Я обновил ответ, чтобы использовать +=. Спасибо @Norswap.
пальто
1
Кроме того, я понял, что установка SDKROOTтого же значения sdk ( /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk) будет работать для меня!
Norswap
4

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

Наконец, это сработало для меня после того, как я переустановил CLI Xcode

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, он мог найти заголовки, и компиляция снова заработала.

frbl
источник
0

apue.h зависимость все еще отсутствовала в моем /usr/local/includeпосле подписки ответил на вопрос Комола Нат Роя в этом вопросе.

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

Мэтью Барбара
источник
Заголовок apue.hпринадлежит У Ричарду Стивенсу (W Richard Stevens), Расширенное программирование Стивена А Раго в среде Unix, 3-е издание 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
Salil
источник
0

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

Наконец, это сработало для меня: https://gitmemory.com/issue/pytorch/pytorch/31190/565153503

Установив следующие env vars:

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
pfcstyle
источник