Як скомпілювати C ++ за допомогою Clang?


97

Я встановив Clang за допомогою apt-get в Ubuntu, і я можу успішно скомпілювати файли C, використовуючи його. Однак я не маю уявлення про те, як скомпілювати через нього C ++. Що мені потрібно зробити для компіляції C ++?

Відповіді:


148

Команда clangпризначена для C, а команда clang++- для C ++.


48

Крім того, для нащадків - Clang (як GCC) приймає -xперемикач для встановлення мови вхідних файлів, наприклад,

$ clang -x c++ some_random_file.txt

Цей потік списку розсилки пояснює різницю між clangі clang++добре: різниця між кланг та кланг ++


4
У мене сталася помилка компонувальника з clang -x c ++ при компіляції cpp-файлу з #include <iostream>. -lstdc ++ прапор вирішив цю проблему.
Слав

1
Зараз у мене на очах вихідний код Кланга. Під час збірки (в ОС Windows) вона спочатку збирає clang.exe, а потім копіює цей виконуваний файл clang++.exe. Отже, це той самий виконуваний файл, просто під час виконання він перевіряє власне ім’я, щоб визначити, чи поводитись як компілятор C або C ++. HTH.
Serge Rogatch

Як примітка, варіант -x c++був дуже корисним , щоб дати як -extra-argдо брязкотом-Tidy , щоб змусити його лікувати .h файл, який містить C ++ замість С
Оголошення N

Це занадто обмежує, щоб бути фактично корисним, якщо ви не будуєте всю річ з джерела. Краще просто використовувати clang++і нехай він виявляє, які файли ви постачаєте до нього. Коли проект може містити .cppфайли, .llфайли (LLVM л) і .o, .a, .soа що ні файлів з сторонніх бібліотек, clang -x c++просто вирве.
Sahsahae

47

Я не знаю, чому немає відповіді, яка безпосередньо стосувалася б проблеми. Коли ви хочете скомпілювати програму C ++, найкраще використовувати clang++. Наприклад, для мене працює наступне:

clang++ -Wall -std=c++11 test.cc -o test

Якщо складено правильно, він створить виконуваний файл test, і ви можете запустити файл, використовуючи ./test.

Або ви можете просто використовувати clang++ test.ccдля компіляції програми. Він створить виконуваний файл за замовчуванням з іменем a.out. Використовуйте ./a.outдля запуску файлу.

Весь процес схожий на g ++, якщо ви знайомі з g ++. Перегляньте цю публікацію, щоб перевірити, які попередження включені із -Wallопцією. На цій сторінці показаний список діагностичних прапорів, які підтримує Clang.


4
Дякуємо, що фактично відповіли на запитання.
Куріус

4

У мене була подібна проблема при створенні Clang із вихідного коду (але не з sudo apt-get install. Це може залежати від версії Ubuntu, яку ви використовуєте).

Можливо, варто перевірити, чи clang++можна знайти правильні місця розташування ваших бібліотек C ++:

Порівняйте результати g++ -v <filename.cpp>та clang++ -v <filename.cpp>під "#include <...> пошук тут починається:".


0

рішення 1:

  clang++ your.cpp

рішення 2:

  clang your.cpp -lstdc++

рішення 3:

   clang -x c++ your.cpp 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.