Nach dem Upgrade auf Catalina 10.15 kann kein C-Programm auf einem Mac kompiliert werden

Lesezeit: 5 Minuten

Benutzeravatar von Jonathan Leffler
Jonathan Leffler

Es gibt eine frühere Frage: C-Programm kann nach dem Upgrade auf Mojave nicht auf einem Mac kompiliert werden, und die Antworten darauf haben die meisten Variationen darüber abgedeckt, was schief geht.

Jetzt – ab Montag, 07.10.2019 – können Sie auf macOS Catalina 10.15 upgraden. Noch einmal, während des Upgrades, die /usr/include Verzeichnis wurde von dem Update umgehauen, obwohl XCode 11.0 vor dem Upgrade (von Mojave 10.14.6) auf Catalina installiert wurde. Folglich erwarten Compiler, dass es eine gibt /usr/include Verzeichnis funktionieren nicht mehr.

Der wichtigste empfohlene Schritt für die Mojave-Probleme – mit dem Befehl:

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

funktioniert nicht aus dem tor da das verzeichnis /Library/Developer/CommandLineTools/Packages/ existiert nicht (also gibt es noch keine .pkg Datei zu öffnen).

Gibt es eine gute (offizielle) Möglichkeit, das Verzeichnis zu erstellen und zu füllen /usr/include?

  • Du brauchst nicht /usr/include um Apples Entwicklertools mit Apples aktuellem Xcode zu verwenden. Die Header und so sind drin Xcode.app/Contents/Developer/Platforms/SomePlatform/SDKs/SomeSDK. (Das Aufbewahren von Headern in verschiedenen Verzeichnissen ist notwendig, um mehrere Zielplattformen zu unterstützen, und es ist gut, keine zu haben /usr/include um sicherzustellen, dass keine Kompilierungen versehentlich Dateien davon verwenden, wenn sie auf eine andere Version als das Hostsystem abzielen.) Was tut xcode-select -p show für den Pfad zum aktiven Entwicklerverzeichnis?

    – Eric Postpischil

    7. Oktober 2019 um 23:47 Uhr


  • Ich habe GCC 9.2.0 (auf Mojave) gebaut und es erwartet, es verwenden zu können /usr/include für die Systemkopfzeilen. Ich würde das gerne immer noch verwenden können, obwohl ich vermute, dass Apple endlich die letzten Reste der Kompatibilität mit älteren Unix-Systemen weggeworfen hat (bis zu einem gewissen Grad war das Schreiben an der Wand mit dem System, das erforderlich ist, damit Mojave funktioniert ‘). In diesem Fall muss ich wahrscheinlich GCC neu erstellen, indem ich die aktuelle Position der Systemheader irgendwie angebe – manuelles Bashing für die Konfiguration von GCC.

    – Jonathan Leffler

    7. Oktober 2019 um 23:59 Uhr

  • @JonathanLeffler: Nach dem Update auf Catalina habe ich auch das Problem, dass einige Dateien (wie stdlib.h) fehlen, die vom Softwarepaket R beim Installieren von R-Paketen verwendet werden. Ich habe dasselbe wie du für macOS_10.14 versucht, aber das ist nicht mehr möglich. GCC, c++ oder was auch immer in /Library/Developer/CommandLineTools/usr/bin installiert ist, aber R weiß es nicht. Was kann ich machen?

    – Sebastian

    12. Oktober 2019 um 11:43 Uhr

  • Eine Möglichkeit, das Problem zu umgehen, besteht darin, die Xcode-Compiler zu verwenden – wenn sie installiert sind, wissen sie, wo sie die Systemheader finden. Die CPATH-Technik in der akzeptierten Antwort scheint ebenfalls gut zu funktionieren. Ich habe auf einem Mac noch nicht unter “Doppeleingabe” gelitten (soweit ich weiß). Ich habe mein iPhone entscheiden lassen, dass ich alle möglichen interessanten Sachen getippt habe, aber bis jetzt, berühren Sie Holz, mein MacBook Pro war in Ordnung.

    – Jonathan Leffler

    30. Oktober 2019 um 4:38 Uhr


  • Die akzeptierte Antwort brachte bash5.0 zum Kompilieren, aber jetzt stoße ich auf Probleme mit make und make install, die sehr ähnlich zu sein scheinen fatal error: wchar.h: No such file or directory # include <wchar.h> compilation terminated. Ich denke, sie werden morgen ein Problem darstellen. Vielen Dank für all Ihre Bemühungen, es war interessant und lehrreich.

    – DryLabRebel

    30. Oktober 2019 um 4:49 Uhr


Benutzeravatar von Roy
Roy

Bevor Sie fortfahren, stellen Sie sicher, dass Sie die xcode-Befehlszeilentools installieren.

xcode-select --install

Eigentlich kann man das! Eigentlich sind alle C-Header hier in diesem Ordner zu finden:

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

Wir müssen nur einen Symlink für alle Header-Dateien in diesem Ordner erstellen:

/usr/local/include/

Bei mir hat es funktioniert! Die folgende Befehlszeile kümmert sich um alle Probleme:

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

Sie erhalten eine Warnung. Einige der Header sind bereits vorhanden, etwa so:

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

völlig ok zu ignorieren. das ist alles.

  • Ja, ich nehme an, das ist möglich – danke für den Vorschlag. Es entspricht nicht wirklich meinen Anforderungen an die “Systemhygiene” (z. B. diese doppelten Header) und die /usr/local/ Die Verzeichnishierarchie ist eher für lokale Software als für Systemsoftware gedacht. IMO, die Header sollten drin sein /usr/include und Apple ist nur ein Schmerz.

    – Jonathan Leffler

    12. Oktober 2019 um 5:36 Uhr

  • Es gibt einen Weg, der funktioniert, Sie können es versuchen. Deaktivieren Sie im Wiederherstellungsmodus das SIP und mounten Sie dann die / im Schreibmodus. Füllen Sie dann die /usr/include Mappe. Dies liegt daran, dass das System in 10.15 im schreibgeschützten Modus bereitgestellt wird. ohne das SIP zu deaktivieren, können Sie das Systemvolume nicht mounten.

    – Roy

    12. Oktober 2019 um 9:38 Uhr

  • Das Deaktivieren des SIP ist für mich nicht akzeptabel, auch nicht als vorübergehende Maßnahme.

    – Jonathan Leffler

    13. Oktober 2019 um 1:01 Uhr

  • Dies ist die einzige Methode, die funktioniert hat, nachdem ich ein halbes Dutzend Anleitungen ausprobiert hatte, +1

    – trdavidson

    24. Februar 2020 um 16:51 Uhr

  • Die Lösung von @Roy hat bei mir nicht funktioniert. Außerdem verursachte es Probleme mit Rcpp auf Catalina. Ich habe das Problem wie hier beschrieben behoben: https://stackoverflow.com/questions/64565863/rcpp-not-working-on-r-3-6-3-macos-catalina-10-15-7/64618049#64618049

    – Bob

    1. November 2020 um 20:43 Uhr

Benutzeravatar von Hamidreza Omidvar
Hamidreza Omidvar

Für mich fügt sich folgender Pfad hinzu CPATH Problem gelöst:

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

  • Ich habe versucht, den CPATH hinzuzufügen; Ich erhalte jedoch immer noch denselben Fehler. Ich versuche nur, einen einfachen Cout zu machen << "Hallo";

    – Jon Pelant

    10. Oktober 2019 um 18:52 Uhr

  • Als ich dies ausprobierte, funktionierte es in einem gelegentlichen Test mit einem GCC 9.2.0, der unter Mojave mit dem, was jetzt Xcode 11.1 ist, erstellt wurde – danke.

    – Jonathan Leffler

    11. Oktober 2019 um 11:32 Uhr

  • Wenn Sie die Befehlszeilentools anstelle von Xcode.app verwenden, verwenden Sie export CPATH=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/

    – nalzok

    19. Oktober 2019 um 5:49 Uhr

  • Eine andere Variante dazu ist: #include <stdlib.h>#include <stdio.h>int main(void) { printf("Hello World!\n"); return EXIT_SUCCESS; }. Mit den Headern in der Sequenz <stdlib.h> dann <stdio.h>, der Code kann nicht kompiliert werden; mit den Headern in umgekehrter Reihenfolge wird der Code ohne Twittering kompiliert. Es ist etwas Seltsames dabei <stdlib.h>. (Compiler-Optionen: gcc -O3 -g -std=c11 -pedantic -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith -Wwrite-strings -Wold-style-definition -Wcast-qual -Wstrict-prototypes -o trial-1 trial-1.c) GCC ist ein selbstgebautes 9.2.0.

    – Jonathan Leffler

    30. Oktober 2019 um 6:11 Uhr


  • @Guddu Ich glaube, letzteres ist ein Alias ​​für ersteres. Ich persönlich bevorzuge SDKs/MacOSX.sdk da es bei jedem System-Upgrade immer auf das neueste SDK verweisen sollte.

    – nalzok

    3. August 2021 um 4:42 Uhr

Benutzeravatar von Jonathan Leffler
Jonathan Leffler

TL;DR

Es scheint, dass Apple erwägt /usr/include als etwas, das den Weg des Dodos gegangen ist – es ist ausgestorben – oder vielleicht ist es wie das von Monty Python Papagei.

Die Verwendung des von Apple bereitgestellten GCC (eigentlich ist das Clang unter einem anderen Namen, wie die Versionsinformationen zeigen) oder Clang vermeidet Probleme. Beide /usr/bin/gcc und /usr/bin/clang finden Sie die Systembibliotheken vier Verzeichnisebenen darunter:

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

Wenn Sie Ihren eigenen GCC oder anderen Compiler erstellen, müssen Sie ihn (wahrscheinlich) konfigurieren, um die Systembibliotheken im Xcode-Anwendungsverzeichnis zu finden.

Erkundungen

Unmittelbar nach dem Upgrade habe ich XCode 11.0 ausgeführt. Es wollte einige zusätzliche Komponenten installieren, also ließ ich es tun. Dies wurde jedoch nicht wiederhergestellt /usr/include oder das Verzeichnis unter /Library.

Einer der anderen Ratschläge in der vorherigen Frage war, Folgendes auszuführen:

xcode-select --install

Dabei behauptete es, dass es die Befehlszeilenprogramme heruntergeladen habe, und stellte dies sicher /usr/bin/gcc und /usr/bin/clang usw waren dabei. Das ist ein nützlicher Schritt (obwohl ich nicht definitiv überprüft habe, ob sie vorher vorhanden waren).

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

Verwenden /usr/bin/gccist es nun möglich, Programme zu kompilieren:

$ 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
$

Jedoch, /usr/include fehlt noch. Darunter befindet sich ein Verzeichnis /Library jetzt:

$ 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
$

Weder die System noch die Library Verzeichnis enthalten alles sehr vielversprechend.

Wenn alles andere fehlschlägt, lesen Sie das Handbuch

Nächster Schritt – Suchen und lesen Sie die Versionshinweise:

Da sind keine Informationen drin, die sich darauf beziehen. Es besteht also die Wahrscheinlichkeit (AFAICS, nach nur ein oder zwei Stunden Aufwand), dass Apple keinen Support mehr hat /usr/include – obwohl es immer noch eine voll geladene hat /usr/lib (nein /lib obwohl).

Zeit, eine andere Zusammenstellung mit GCC-Option zu überprüfen -v hinzugefügt (in dem von mir verwendeten Makefile, setting UFLAGS fügt die Option zur C-Compiler-Befehlszeile hinzu):

$ 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
$

Die wichtigsten Informationen in diesem Datensturm sind:

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

Das ist effektiv das Stammverzeichnis für die Kompilierung, also sollte es Unterverzeichnisse darunter für geben usr und 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
$

Dies zeigt, dass der kilometerlange und völlig unmerkliche Verzeichnisname die standardmäßigen C- und POSIX-Header sowie Apple-spezifische Extras enthält.

Der Vorherige /usr/local/ Verzeichnis scheint intakt zu sein; die Warnung vor usr/local/include nicht vorhanden unter der -isysrootdir ist harmlos (und nicht sichtbar ohne die -v Möglichkeit).

  • Entschuldigung, ich konnte Ihrem Vorschlag nicht folgen. Ich bekomme den gleichen Fehler mit dem Catalina-Update. Mit vscode konnte ich keine C++ Apps bauen und bekomme wchar.h kein Fehler gefunden. Ich habe versucht, diesen Ordner -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include einzuschließen, und ich erhalte andere Fehler wie etwa fehlende Symbole für “error: no member mit dem Namen ‘isless’ im globalen Namensraum”

    – Benutzer3279954

    10. Oktober 2019 um 7:00 Uhr

  • @trojanfoe – Ich bevorzuge SCCS, aber 1999 war nicht klar, ob SCCS nach Y2K vernünftig funktionieren würde (und es gab keine gute Open-Source-Implementierung von SCCS, von der ich wusste), also wechselte ich widerwillig zu RCS.

    – Jonathan Leffler

    10. Oktober 2019 um 13:05 Uhr

  • Wenn jemand immer noch darauf stößt, nachdem er die Schritte hier befolgt hat, überprüfen Sie, ob dies der Fall ist llvm installiert über selbstgebraut und versuchen Sie es vollständig zu deinstallieren. Das hat es für mich gelöst.

    – Nitza

    11. Oktober 2019 um 2:27 Uhr


  • @trojanfoe: ein Problem (mein Hauptproblem) mit /usr/include AWOL gegangen ist, dass, wenn Sie Ihren eigenen GCC aus dem Quellcode erstellt haben, dieser wahrscheinlich kompiliert wurde, um die Systemheader darin zu finden /usr/include und deshalb scheitern die Kompilierungen. Ich möchte sowohl den neuesten GCC als auch Clang verwenden. Ich verwende gerne Apples Clang, aber ich bin nicht glücklich darüber, Apples Clang zu verwenden, das sich als GCC tarnt – es ist nicht dasselbe wie GCC. Ich habe noch kein Rezept zum Erstellen von GCC mit verschobenen Systemheadern ausgearbeitet. (Ich finde --with-native-system-header-dir="${XCODE_HDR}" ist Teil der Antwort; es ist jedoch nicht die ganze Antwort.)

    – Jonathan Leffler

    11. Oktober 2019 um 9:54 Uhr

  • @Nitza Ich bin mit deinem Kommentar auf Gold gestoßen! ich hatte llvm von Homebrew installiert, weil ich hatte ccls Eingerichtet. Ich benutze jetzt tatsächlich clangdalso verschwanden diese Clang-Build-Probleme danach brew uninstall llvm. Vielen Dank.

    – Steven Lu

    28. November 2020 um 21:29 Uhr


Benutzeravatar von coatless
ohne Mantel

Stellen Sie implizit Folgendes ein Make Variablen, die darauf verweisen, wo sich die Header jetzt für Xcode Command Line Tools (Xcode CLI) befinden:

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

Das -isysroot Möglichkeit aktualisiert den Speicherort der Root-Dateien weg vom System-Root-Verzeichnis /.

Dies stellt also sicher, dass die gemeinsame /usr/* Dateien werden an ihrem neuen Ort gefunden.

Das heißt, die Dateien unter /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk sind jetzt gefunden. Diese Dateien sind:

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

Nancys Benutzeravatar
Nancy

Ich bin ein Neuling mit dem C++-Compiler für R in OSX und habe das gleiche Problem, dass C++ den Header nicht finden konnte, nachdem das Betriebssystem aktualisiert wurde (math.h fehlt, obwohl es da war). Ich habe die Anweisungen von befolgt https://thecoatlessprofessor.com/programming/cpp/r-compiler-tools-for-rcpp-on-macos/ aber es hat sich nichts geändert.

Schließlich funktionierte es für mich, nachdem ich die Xcode-CLI neu installiert hatte

xcode-select --install

und ändern Sie dann die Flags in Var, wie @Coatless vorgeschlagen hat:

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

Unter MacOS Catalina 10.15.4 musste ich mit Xcode Version 11.5 (11E608c) auch den Bibliothekspfad in meiner .zshrc aktualisieren (die MacOSX.sdk-Pfade sind neu):

export CPATH='/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include:/opt/local/include'
export LIBRARY_PATH='/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib:/opt/local/lib'

Benutzeravatar von pfcstyle
pfcstyle

Bei mir funktioniert es wie folgt:

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

1421050cookie-checkNach dem Upgrade auf Catalina 10.15 kann kein C-Programm auf einem Mac kompiliert werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy