В macOS Catalina (и предыдущих версиях, а также, вероятнее всего, последующих версиях) есть два аспекта проблемы и некоторые предлагаемые решения.
Как называется компилятор, используемый make
для по умолчанию?
$ mkdir junk
$ cd junk
$ > x.cpp
$ > y.c
$ make x y
c++ x.cpp -o x
cc y.c -o y
$ cd ..
$ rm -fr junk
Это показывает, что имена, используемые make
, cc
и c++
. Это не clang
или clang++
, но, очевидно, они не gcc
и g++
.
$ which cc c++
/usr/bin/cc
/usr/bin/c++
$
Какой это компилятор на самом деле?
Какой компилятор действительно живет за именами cc
, c++
, gcc
, g++
, clang
и clang++
? Мы можем проверить, какой это на самом деле компилятор, заставив их идентифицировать свою версию:
$ for compiler in cc c++ gcc g++ clang clang++
> do
> which $compiler
> $compiler --version
> done
/usr/bin/cc
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
/usr/bin/c++
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
/usr/bin/gcc
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
/usr/bin/g++
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
/usr/bin/clang
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
/usr/bin/clang++
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$
Как вы можете видеть, все версии, установленные в /usr/bin
, являются одним и тем же компилятором, и этот компилятор clang
или clang++
.
Это было выполнено на машине с macOS Mojave 10.14.6 и XCode 11.3.1. Последняя версия XCode - 11.4.1 - доступна только на Catalina. Тем не менее, общий вывод тот же - все компиляторы C и C ++ действительно скрытые clang
и clang++
.
Как вы получаете GNU G CC на свою машину?
Как вы получаете настоящий GNU G CC - настоящий G CC, а не clang
в скрытой форме - на вашу машину?
- Использование Brew чтобы установить G CC (я не проверял, какая версия G CC является текущей).
- Или использовать MacPorts (опять же, я не проверял, какая версия G CC - текущий).
- Если вы любите приключения, сделайте это самостоятельно (но мне еще не удалось построить G CC 9.3.0 на Каталине; у меня есть G CC 9.2.0 построен на MacOS Mojave 10.14.x, который работает нормально на Catalina, хотя - с одной переменной окружения, необходимой для поиска заголовков).
- Может быть Fink - в нем перечислены G CC 8.4 как будет доступно в 2020 году; Я не знаю о более новых версиях.
Имейте в виду, что Apple старалась скрывать файлы заголовков системы за много миль (не в /usr/include
), и вы не можете изменить эту часть файловой системы, чтобы добавить символическую ссылку туда, где они их спрятали):
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
(Вы имеете в виду, что вы не могли догадаться, что я тоже!)
Как вы меняете компилятор по умолчанию?
После того, как вы установили G CC где-нибудь в нужном месте, вам нужно убедиться, что вы используете «настоящий» G CC, а не «фальшивый» в /usr/bin
. Частично вы делаете это, гарантируя, что каталог bin для «настоящего» G CC находится в вашем PATH до /usr/bin
. У меня установлен G CC 9.3.0 в /opt/gcc/v9.3.0
, поэтому /opt/gcc/v9.3.0/bin
появляется в моем PATH задолго до того, как /usr/bin
.
Вам также необходимо убедиться, что конфигурация для riak
( устанавливаемое программное обеспечение) использует правильные компиляторы. Если есть сценарий ./configure
, запустите его с правильным путем, указанным для компиляторов. Например, я мог бы использовать:
./configure CC=/opt/gcc/v9.3.0/bin/gcc CXX=/opt/gcc/v9.3.0/bin/g++
Вы также можете установить эти значения в качестве переменных среды.
Если он использует cmake
или какой-либо другой пакет конфигурации, вам необходимо проконсультироваться инструкция по установке. Это обычно README
или иногда INSTALL
.
См. Также (все более старые сообщения):