получение c ++ 11 — совместимого компилятора

Все это похоже на колоссальный беспорядок.
Все, что я хочу, это компилятор, который реализует C ++ 11, поэтому я могу использовать <chrono>, Но я так растерялся с самого начала.

В настоящее время я создаю программы, вызывая G ++, но когда я проверяю версию через $ g++ -v, Я получил:

gcc версия 4.2.1 (на основе Apple Inc., сборка 5658) (сборка LLVM
2336.11.00)

В чем дело? Я использую G ++? GCC? LLVM? Я даже не знаю Это одно и то же?

Поэтому сейчас я пытаюсь собрать и загрузить GCC 4.7 через gnu.org, но я понятия не имею, о чем идет речь. Я никогда не видел так много сокращений для вещей, которые я не знаю.

Почему это так сложно? Что со всеми этими версиями, причем некоторые из них реализуют только некоторые части C ++ 11, а не другие?

12

Решение

Вот ситуация на OS X.

Есть два компилятора C ++, установленных по умолчанию.

[5:49pm][wlynch@watermelon ~] g++ --version
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)

[5:49pm][wlynch@watermelon ~] clang++ --version
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)

В g ++ выполняется llvm-gcc, который является внешним интерфейсом gcc, а затем внутренним сервером llvm.

Clang ++ выполняет Clang, который является внешним интерфейсом Clang, а затем внутренним интерфейсом llvm.

Если вам нужен компилятор C ++ 11 в OS X без установки других пакетов, единственный вариант — использовать компилятор clang.

Необходимые флаги:

clang++ -stdlib=libc++ -std=gnu++11

Чтобы описать два флага, которые я передаю:

  • -stdlib=libc++ использует стандартную библиотеку libc ++ вместо gnu libstdc ++. На OS X версия libc ++ имеет поддержку c ++ 11. GNU libstdc ++ один не делает.
  • -std=gnu++11 сообщает компилятору о поддержке функций кода c ++ 11, таких как lambdas и enum class. Вы также можете пройти -std=c++11, что аналогично, но не включает некоторые обычно ожидаемые расширения GNU.

Обновление для OS X 10.9: Начиная с OS X Mavericks, и g ++, и clang ++ фактически используют clang. Разница лишь в том, что g ++ будет подразумевать -stdlib=libstdc++ и clang ++ будет подразумевать -stdlib=libc++, Итак, на Mavericks, если вы хотите использовать C ++ 11, вы можете следовать приведенному выше совету или просто сделать:

clang++ -std=gnu++11

Обновление для OS X 10.10: Начиная с OS X Yosemite, g ++ все еще замаскирован. Однако ни один из них по умолчанию не использует libstdc ++. Оба сейчас на libc ++.

22

Другие решения

Похоже, у вас есть Xcode 4.6 и новейшие инструменты командной строки. Это из заметок о выпуске:

Important: The LLVM GCC compiler does not include the latest Objective-C and
C++11 features. Xcode 4.6 is the last major Xcode release which includes the
LLVM GCC compiler and the GDB debugger. Please migrate your projects to use the
LLVM compiler and LLDB debugger…

Я думаю, что вы хотите использовать c++ вместо:

$ c++ -v
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix
0

@sharth: С момента выхода XCode 5.0 ситуация на Mac значительно изменилась. clang / clang ++ являются компиляторами C / C ++ по умолчанию. Я считаю, что они соответствуют LLVM версии 3.3, и эта версия clang ++ полностью C ++ 11-совместимый. Обратите внимание, что clang++ --version вернет номер версии, такой как «5.0.x» на Mac, но это относится к версии XCode.

Я использую Apple clang ++ в проекте C ++ 11 уже несколько месяцев, и до сих пор я не видел никаких проблем. Нет абсолютно никакой причины использовать любой другой компилятор C ++ на Mac только сейчас 🙂

Ситуация с GCC / G ++ не так радужна. В последней версии G ++ (4.8.2) реализована большая часть стандарта C ++ 11, однако стандартная библиотека не соответствует! Например, std::regex не реализован в libstdc ++, но вы обнаружите это только тогда, когда вы запускаете свой код и конструкторы регулярных выражений бросают std::regex_error -s. (Я нашел это нелегким путем, пытаясь перенести вышеупомянутый маленький проект на Linux.) Сообщество верит, что полное соответствие будет достигнуто с выпуском 4.9 G ++. До тех пор вы должны использовать компиляторы Clang и в Linux.

У меня нет доступа к последнему набору компиляторов Intel C ++, поэтому понятия не имею, насколько icpc является.

0
По вопросам рекламы [email protected]