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!
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++.
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++).
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