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

Существует предыдущий вопрос . Не удается скомпилировать программу на C на Mac после обновления до Мохаве , и ответы на него охватили большинство вариантов того, что идет не так.

Теперь, по состоянию на понедельник 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?

18
задан Jonathan Leffler 8 October 2019 в 02:54
поделиться

6 ответов

Для меня добавляющий следующий путь к CPATH решил проблему:

export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
17
ответ дан 27 November 2019 в 03:45
поделиться

Перед продолжением удостоверьтесь, что установили инструменты командной строки 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

полностью хорошо для игнорирования. это - все.

19
ответ дан 27 November 2019 в 03:45
поделиться

TL; DR

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

Используя обеспеченный Apple GCC (на самом деле, это - Лязг любым другим именем, поскольку информация о версии показывает), или Лязг избегает проблем. И /usr/bin/gcc и /usr/bin/clang найдет системные библиотеки четырьмя уровнями каталога ниже:

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

при создании собственного GCC или другого компилятора необходимо будет (вероятно), настроить его для нахождения системных библиотек под каталогом приложения XCode.

Исследования

Сразу после обновления, я выполнил XCode 11.0. Это хотело установить некоторые дополнительные компоненты, таким образом, я позволяю ему сделать так. Однако это не восстановило /usr/include или каталог под [1 112].

Один из других советов в предыдущем вопрос состоял в том, чтобы работать:

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
$

Используя [1 115], теперь возможно скомпилировать программы:

$ 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 все еще отсутствует. Существует каталог под [1 117] теперь:

$ 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, только после часа или усилия two), который 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

Это - эффективно 'корневой' каталог для компиляции, таким образом, должны быть подкаталоги под этим для [1 125] и 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/ каталог, кажется, неповрежден; предупреждение приблизительно [1 128] не существующие под эти -isysrootdir безопасны (и не видимы без -v опция).

14
ответ дан 27 November 2019 в 03:45
поделиться

Я - новичок с компилятором C++ для R в OSX, и я получил ту же проблему, что C++ не мог найти заголовок после того, как ОС была обновлена ( пропавшие без вести math.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
ответ дан 27 November 2019 в 03:45
поделиться

зависимость от apue.h все еще отсутствовала в моем /usr/local/include после следования Komol Nath Roy ответ в этом вопросе.

я загрузил зависимость вручную от мерзавца и поместил ее в /usr/local/include

0
ответ дан 27 November 2019 в 03:45
поделиться

Установите следующее неявное 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
5
ответ дан 27 November 2019 в 03:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: