Respostas:
Além disso, para a posteridade - o Clang (como o GCC) aceita a -x
opção de definir o idioma dos arquivos de entrada, por exemplo,
$ clang -x c++ some_random_file.txt
Esta discussão lista de discussão explica a diferença entre clang
e clang++
bem: Diferença entre clang e clang ++
clang.exe
e, em seguida, copia o executável para o clang++.exe
. Portanto, é o mesmo executável, apenas em tempo de execução ele verifica seu próprio nome para distinguir se deve se comportar como compilador C ou C ++. HTH.
-x c++
era muito útil para dar como um -extra-arg
de tinido-arrumado , para forçá-lo para o tratamento de um ficheiro contendo .h como C ++, em vez de C
clang++
e permitir que ele detecte os tipos de arquivos que você fornece. Quando um projeto pode conter .cpp
arquivos, .ll
arquivos (llvm IR) e .o
, .a
, .so
e que não os arquivos de bibliotecas de terceiros, clang -x c++
só vai vomitar.
Não sei por que não há uma resposta que trate diretamente do problema. Quando você deseja compilar um programa C ++, é melhor usar clang++
. Por exemplo, o seguinte funciona para mim:
clang++ -Wall -std=c++11 test.cc -o test
Se compilado corretamente, ele produzirá o arquivo executável test
e você pode executar o arquivo usando ./test
.
Ou você pode apenas usar clang++ test.cc
para compilar o programa. Ele produzirá um arquivo executável padrão chamado a.out
. Use ./a.out
para executar o arquivo.
Todo o processo é muito parecido com o g ++ se você estiver familiarizado com o g ++. Veja esta postagem para verificar quais avisos estão incluídos na -Wall
opção. Esta página mostra uma lista de sinalizadores de diagnóstico suportados pelo Clang.
Tive um problema semelhante ao compilar o Clang a partir do código-fonte (mas não com sudo apt-get install
. Isso pode depender da versão do Ubuntu que você está executando).
Pode valer a pena verificar se clang++
consegue encontrar os locais corretos de suas bibliotecas C ++:
Compare os resultados de g++ -v <filename.cpp>
e clang++ -v <filename.cpp>
, em "#include <...> a pesquisa começa aqui:".
#include <iostream>
. O sinalizador -lstdc ++ resolveu esse problema.