Я установил Clang с помощью apt-get в Ubuntu, и я могу успешно компилировать файлы C, используя его. Однако я понятия не имею, как через него скомпилировать C ++. Что мне нужно сделать для компиляции C ++?
Я установил Clang с помощью apt-get в Ubuntu, и я могу успешно компилировать файлы C, используя его. Однако я понятия не имею, как через него скомпилировать C ++. Что мне нужно сделать для компиляции C ++?
Ответы:
Я не знаю, почему нет ответа, прямо касающегося проблемы. Когда вы хотите скомпилировать программу на C ++, лучше всего использовать clang++. Например, у меня работает следующее:
clang++ -Wall -std=c++11 test.cc -o test
Если он скомпилирован правильно, он создаст исполняемый файл test, и вы можете запустить его, используя ./test.
Или вы можете просто использовать clang++ test.ccдля компиляции программы. Будет создан исполняемый файл по умолчанию с именем a.out. Используйте ./a.outдля запуска файла.
Весь процесс очень похож на g ++, если вы знакомы с g ++. Посмотрите этот пост, чтобы узнать, какие предупреждения включены в -Wallопцию. На этой странице показан список диагностических флагов, поддерживаемых Clang.
Примечание об использованииclang -x c++ : Ким Грасман говорит, что вы также можете использовать clang -x c++для компиляции программ cpp, но это может быть неверно. Например, у меня есть простая программа ниже:
#include <iostream>
#include <vector>
int main() {
/* std::vector<int> v = {1, 2, 3, 4, 5}; */
std::vector<int> v(10, 5);
int sum = 0;
for (int i = 0; i < v.size(); i++){
sum += v[i]*2;
}
std::cout << "sum is " << sum << std::endl;
return 0;
}
clang++ test.cc -o testбудет успешно компилироваться, но clang -x c++не будет, показывая много ошибок неопределенных ссылок. Так что я думаю, что они не совсем эквивалентны. Лучше clang++вместо этого clang -x c++при компиляции программ на C ++.
Кроме того, для потомков - Clang (например, GCC) принимает -xпереключатель для установки языка входных файлов, например,
$ clang -x c++ some_random_file.txt
Эта ветка списка рассылки хорошо объясняет разницу между clangи clang++: Разница между clang и clang ++
#include <iostream>. -lstdc ++ флаг решил эту проблему.
clang.exeвыполняется сборка , а затем копирование этого исполняемого файла в clang++.exe. Таким образом, это один и тот же исполняемый файл, только во время выполнения он проверяет свое собственное имя, чтобы определить, вести себя как компилятор C или C ++. HTH.
-x c++был очень полезным , чтобы дать как -extra-argк лязгом-Tidy , чтобы заставить его лечить .h файл, содержащий C ++ вместо С
clang++и позволить ему определять, какие файлы вы ему предоставляете. Когда проект может содержать .cppфайлы, .llфайлы (LLVM л) и .o, .a, .soа что нет файлов из сторонних библиотек, clang -x c++просто вырвет.
clang++работает, но clang -x c++показывает множество неопределенных ссылочных ошибок (другие флаги такие же). Так что, думаю, лучше всего использовать clang++. Протестированная версия clang: 11.0.0.
У меня была аналогичная проблема при сборке Clang из исходников (но не с sudo apt-get install. Это может зависеть от версии Ubuntu, которую вы используете).
Возможно, стоит проверить, clang++можно ли найти правильное расположение ваших библиотек C ++:
Сравните результаты g++ -v <filename.cpp>и в clang++ -v <filename.cpp>разделе "#include <...> поиск начинается здесь:".
Откройте окно терминала и перейдите в каталог вашего проекта. Выполните эти наборы команд в зависимости от того, какой компилятор вы установили:
Чтобы скомпилировать несколько файлов C ++ с помощью clang ++:
$ clang++ *.cpp
$ ./a.out
Чтобы скомпилировать несколько файлов C ++ с использованием g ++:
$ g++ -c *.cpp
$ g++ -o temp.exe *.o
$ ./temp.exe