Co za różnica? clang++ /clang-std=c++11

Błędnie użyłem tej komendy, która nie powiodła się w kroku łącza:

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

Czy ktoś może wyjaśnić dlaczego clang udostępnia opcję języka C++ i dlaczego nie łączy się? dlaczego opcje -x c++ lub -std=c++11 nie dają tego samego co clang++? Dzięki!

Author: djwbrown, 2013-11-18

2 answers

Technicznie żaden z programów o nazwie clang LUB clang++ nie jest kompilatorem: oba są sterownikami, które analizują argumenty wejściowe i określają, jakie Kompilatory/asemblery/linkery mają wywoływać na jakich plikach z jakimi argumentami linii poleceń. Jedyną różnicą między tymi dwoma jest to, że clang łączy się tylko z biblioteką standardową C, jeśli wykonuje łącze, podczas gdy clang++ łączy się zarówno z bibliotekami standardowymi C++, jak i C.

Opcja -x=<language> nadpisuje programy sterowników' heurystyka dla określenia języka plików źródłowych, kieruje sterownik do wywołania kompilatora dla <language> niezależnie od tego.

Opcja -std=<dialect> wybiera dialekt danego języka, którego chcesz użyć. Jeśli chcesz mieć pewność, że twój program C++ jest przenośny do starego kompilatora C++98, możesz go skompilować za pomocą -std=c++98. -std dotyczy tylko języka docelowego: nie będzie próbował kompilować np. asemblera lub Javy jako C++98, tylko pliki źródłowe, które sterownik uważa za C++.

W skrócie, istnieją dwa różne programy sterowników, które ułatwiają wybór bibliotek do łączenia. Istnieją uzasadnione przypadki użycia kompilacji C++, ale nie linkowania z biblioteką standardową C++.

 28
Author: Casey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-18 15:53:46

Clang to nazwa całego kompilatora.

Jednak z punktu widzenia wiersza poleceń:

    Clang jest kompilatorem C Clang++ jest kompilatorem C++ (podobnie jak G++ jest kompilatorem C++, podczas gdy gcc jest kompilatorem C)

Opcja-std = c++11 włącza nowy standard C++11 (jak w g++).

 3
Author: Claudio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-18 12:03:09