В чем же разница? clang++ | clang-std=c++11
Я ошибочно использовал эту команду, которая не удалась на шаге соединения:
$ clang -std=c++11 -stdlib=libc++ myInputFile.cpp
Может ли кто-нибудь объяснить, почему clang предоставляет опцию языка C++ и почему он не связывается? Почему варианты -x c++
или -std=c++11
не выполняют то же самое, что и clang++
? Спасибо!
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++.