Kurzfassung : Nach vielen Untersuchungen konnte ich nicht zum Installieren von Software auf MacOS von der Quelle entweder mit llvm
und -mretpoline
Flagge oder mit gcc
und -mindirect-branch=thunk -mfunction-return=thunk -mindirect-branch-register
Fahnen. Dies scheint allgemeiner R
und spezifischer zu sein MacOS
, daher habe ich den Titel entsprechend geändert. Ich vermute, dass dies ab dem 27. April 2018 nicht auf einem Mac möglich ist. Ich verwende macOS High Sierra Version 10.13.3 (17D102).
Lange Version : Folgendes gilt für GnuPG, das ich vor R installiert habe (da R gfortran benötigt, was gcc erfordert, was MPFR erfordert, das mit einer GPG-Signatur geliefert wird, die ich überprüfen wollte). Ich habe die Schritte befolgt , um GPG von Git zu installieren .
Neueste LLVM (mit Homebrew)
LLVM von Apple schlägt fehl (siehe unten), daher habe ich LLVM clang 6 verwendet, um dieses Problem zu beheben, und ich habe es mit Homebrew installiert (es beseitigt ein wenig den Zweck des Kompilierens aus der Quelle mit bestimmten Flags, aber ich hatte keine Zeit mehr). Ich habe Homebrew installiert mit:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
dann zweimal mit aktualisiert
brew update
Für die Installation von clang mit Homebrew war XCode erforderlich, also habe ich diesen aus dem App Store installiert. Dann folgte ich den Schritten auf dieser Seite :
brew install --with-toolchain llvm
Dann fügte ich das -mretpoline
Flag zu beiden C
hinzu, ich fügte den Pfad zu beiden C
und zu C++
Compilern hinzu und rief die Shellskripte von GPG an:
export CFLAGS='-mretpoline' export CC=/usr/local/opt/llvm/bin/clang export CXX=/usr/local/opt/llvm/bin/clang++ ./autogen.sh ./configure --sysconfdir=/etc --enable-maintainer-mode && make
Ich habe diesen Fehler erhalten:
checking whether the C compiler works... no
Die Protokolldatei config.log
enthält weitere Details:
configure:4049: /usr/local/opt/llvm/bin/clang -mretpoline conftest.c >&5 fatal error: error in backend: MachO doesn't support COMDATs, '__llvm_retpoline_r11' cannot be lowered. clang-6.0: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Dieser Thread mit einem Kommentar vom Januar 2018 am unteren Rand besagt, dass Mac noch nicht unterstützt wird mit -mretpoline
:
samkellett: @chandlerc wird die Unterstützung von MacOS absichtlich weggelassen (dh noch nicht implementiert)? chandlerc: Überhaupt nicht, ich habe einfach kein Mac-System zum Testen ...
Es hat seitdem keine Antwort mehr. Die Installation mit LLVM ist daher fehlgeschlagen.
GCC (mit Homebrew)
Eine andere Alternative war das Kompilieren mit gcc
LLVM. Ich habe die neueste Version von Clang (6.0) mit installiert
brew install gcc
Und ich habe die gcc
Flaggen von dieser Seite hinzugefügt, die sich von LLVM unterscheiden. Dieses Bash-Skript fügt die Flags beiden hinzu C
und C++
gibt die Pfade zu beiden Compilern an und ruft die Shell-Skripte von GPG auf:
export CFLAGS='-mindirect-branch=thunk -mfunction-return=thunk -mindirect-branch-register' export CXXFLAGS=$CFLAGS export CC=/usr/local/opt/gcc/bin/gcc-7 export CXX=/usr/local/opt/gcc/bin/g++-7 ./autogen.sh ./configure --sysconfdir=/etc --enable-maintainer-mode && make
und wieder bekomme ich den fehler:
checking whether the C compiler works... no
Die Protokolldatei config.log
enthält weitere Details:
configure:4027: checking whether the C compiler works configure:4049: /usr/local/opt/gcc/bin/gcc-7 -mindirect-branch=thunk -mfunction-return=thunk -mindirect-branch-register conftest.c >&5 Undefined symbols for architecture x86_64: "__x86_return_thunk", referenced from: _main in ccZuBhFQ.o (maybe you meant: ___x86_return_thunk) ld: symbol(s) not found for architecture x86_64 collect2: error: ld returned 1 exit status configure:4053: $? = 1 configure:4091: result: no
Es ist seltsam, dass der Compiler den ähnlich klingenden Namen mit einem zusätzlichen Unterstrich kennt.
Also auch gcc
gescheitert. Und jetzt bin ich ratlos.
Anhang: LLVM von Apple
Das folgende Bash-Skript exportiert die Flags für make
GnuPG und ruft die Shell-Skripts auf:
export CFLAGS='-mretpoline' export CXXFLAGS=$CFLAGS echo $CFLAGS echo $CXXFLAGS ./autogen.sh ./configure --sysconfdir=/etc --enable-maintainer-mode && make
Es schlägt mit dem von Apple gelieferten Compiler fehl, aber es zeigt an, dass die Flags zum Compiler gelangen:
configure:4045: gcc -mretpoline -mindirect-branch=thunk -mfunction-return=thunk -mindirect-branch-register conftest.c >&5 clang: error: unknown argument: '-mretpoline'
@ Seths Kommentar ist also richtig, um Flags an den Compiler zu senden.