В чем же разница? clang++ | clang-std=c++11


Я ошибочно использовал эту команду, которая не удалась на шаге соединения:

$ clang -std=c++11 -stdlib=libc++ myInputFile.cpp

Может ли кто-нибудь объяснить, почему clang предоставляет опцию языка C++ и почему он не связывается? Почему варианты -x c++ или -std=c++11 не выполняют то же самое, что и clang++? Спасибо!

2 27

2 ответа:

Технически ни одна из программ с именами clang или clang++ не является компилятором: они оба являются драйверами , которые анализируют входные аргументы и определяют, какие компиляторы/ассемблеры/компоновщики вызывать на какие файлы с какими аргументами командной строки. Единственное различие между ними состоит в том, что clang связывается только со стандартной библиотекой C, если она выполняет связь, тогда как clang++ связывается как со стандартными библиотеками C++, так и C.

Параметр -x=<language> переопределяет программы драйвера' эвристика для определения языка исходного файла, он направляет драйвер, чтобы вызвать компилятор для <language> независимо.

Опция -std=<dialect> выбирает, какой диалект конкретного языка вы хотите использовать. Если вам нужно убедиться, что ваша программа c++ переносима на старый компилятор C++98, вы можете скомпилировать ее с помощью -std=c++98. -std применяется только к целевому языку: он не будет пытаться компилировать, например, ассемблер или java как C++98, только исходные файлы, которые драйвер считает C++.

Короче говоря, есть две различные программы драйверов, чтобы облегчить выбор библиотек, с которыми нужно связать. Существуют разумные варианты использования для компиляции C++ , но не связывания со стандартной библиотекой C++.

Clang-это имя всего компилятора.

Однако с точки зрения командной строки:

  • Clang-компилятор языка Си
  • Clang++ - это компилятор C++ (подобно тому, как g++ - компилятор C++, а gcc-компилятор C)

Параметр-std=c++11 включает новый стандарт C++11 (как в g++).