Как мне убедиться, что мой компилятор C / C ++ по умолчанию - GCC - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь установить Riak из источника на macOS (https://docs.riak.com/riak/kv/2.2.3/setup/installing/mac-osx.1.html#installing -из-источника ).

Есть примечание:

Riak не будет компилироваться с Clang. Пожалуйста, убедитесь, что ваш компилятор C / C ++ по умолчанию имеет вид G CC

Как узнать, какой компилятор является стандартным и как его изменить?

macOS Catalina (10.15 .4), какая команда печатает:

$ which clang
/usr/bin/clang
$ which gcc
/usr/bin/gcc

1 Ответ

2 голосов
/ 18 апреля 2020

В 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.


См. Также (все более старые сообщения):

...