Jaka jest różnica między g++ a gcc?
Jaka jest różnica między g++ a gcc? Które z nich powinny być używane do ogólnego rozwoju c++?
10 answers
gcc
i g++
są sterownikami kompilatora 'Gnu Compiler Collection ' (który był kiedyś tylko ' Gnu C Compiler ').
Mimo że automatycznie ustalają, które backendy (cc1
cc1plus
...) wywołanie w zależności od typu pliku, chyba że jest nadpisane przez -x language
, mają pewne różnice.
Prawdopodobnie najważniejszą różnicą w ich domyślnych ustawieniach jest to, z którymi bibliotekami łączą się automatycznie.
Według GCC online dokumentacja opcje łącza i Jak wywoływany jest g++ , g++
jest odpowiednikiem gcc -xc++ -lstdc++ -shared-libgcc
(1. jest opcją kompilatora, 2. dwie są opcjami linkera). Można to sprawdzić uruchamiając oba z opcją -v
(wyświetla uruchamiane polecenia backend toolchain).
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
2018-03-14 08:18:58
GCC: GNU Compiler Collection
- Referrery do wszystkich róşnych jÄ ™ zykĂłw obsĹ ' ugiwanych przez kompilator GNU.
Gcc: kompilator GNU C
g++: kompilator GNU C++
Główne różnice:
- gcc skompiluje:*.c/*.pliki cpp jako odpowiednio C i C++.
- g++ skompiluje:*.c/*.pliki cpp, ale wszystkie będą traktowane jako pliki C++.
- również jeśli używasz g++ do łączenia plików obiektowych, automatycznie łączy się w biblioteki std C++ (gcc tego nie robi).
- GCC kompilowanie plików C ma mniej predefiniowanych makr.
- kompilowanie gcc *.kompilacji cpp i G++*.c/*.pliki cpp mają kilka dodatkowych makr.
Dodatkowe makra podczas kompilacji*.pliki cpp:
#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern
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
2017-07-15 19:14:27
W c++ powinieneś używać g++.
To ten sam kompilator (np. GNU compiler collection). GCC lub g++ po prostu wybierz inny front-end z różnymi domyślnymi opcjami.
W skrócie: jeśli używasz g++, frontend powie linkerowi, że możesz chcieć połączyć się z bibliotekami standardowymi C++. Interfejs GCC tego nie zrobi (również może się z nimi połączyć, jeśli podasz odpowiednie opcje wiersza poleceń).
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
2008-10-05 20:29:26
Jaka jest różnica między g++
a gcc
?
gcc
rozwinął się z jednego języka "GNU C Compiler" do wielojęzycznego "GNU Compiler Collection". Termin "kompilator GNU C" jest nadal używany czasami w kontekście programowania w języku C.
The g++
jest kompilatorem C++ dla GNU Compiler Collection. Podobnie jak gnat
jest kompilatorem Ada dla gcc
. zobacz użycie GNU Compiler Collection (GCC)
Na przykład, Ubuntu 16.04 i 18.04 man g++
zwraca stronę podręcznika GCC(1)
.
Ubuntu 16.04 i 18.04 man gcc
stwierdza, że ...
g++
akceptuje głównie te same opcje cogcc
I że domyślne ...
... użycie
gcc
nie dodaje biblioteki C++.g++
jest programem który wywołuje GCC i automatycznie określa połączenie z C++ biblioteka. Leczy .c, .h i .i pliki jako pliki źródłowe C++ zamiast Pliki źródłowe C, chyba że-x jest używany. Ten program jest również przydatny, gdy precompilowanie pliku nagłówkowego C za pomocą a .rozszerzenie h do użytku w C++ Kompilacje.
Przeszukaj strony podręcznika gcc
w poszukiwaniu szczegółowych informacji na temat wariancji opcji gcc
i g++
.
Który z nich powinien być używany do ogólnego rozwoju c++?
Technicznie, albo gcc
lub g++
mogą być używane do ogólnego rozwoju C++ z odpowiednimi ustawieniami opcji. Jednak domyślne zachowanie {[0] } jest naturalnie wyrównane do rozwój C++.
Na stronie podręcznika Ubuntu 18.04 dodano Następujący akapit:
Zwyczajowym sposobem uruchomienia GCC jest uruchomienie pliku wykonywalnego o nazwie
gcc
, lubmachine-gcc
podczas kompilacji krzyżowej, lubmachine-gcc-version
, aby uruchomić określoną wersję GCC. podczas kompilacji programów C++, powinieneś wywołać GCC jakog++
.
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
2018-10-03 02:56:30
Chociaż polecenia gcc i g++ robią bardzo podobne rzeczy, g++ jest zaprojektowany tak, aby być poleceniem, które można wywołać do kompilacji programu C++; jest przeznaczony do automatycznego wykonywania właściwych rzeczy.
Za kulisami, to naprawdę ten sam program. Jak rozumiem, obie strony decydują, czy skompilować program w C czy w c++ na podstawie rozszerzenia nazwy pliku. Oba są zdolne do łączenia się z biblioteką standardową C++, ale domyślnie robi to tylko g++. Więc jeśli masz program napisany w C++ tak się składa, że nie trzeba linkować z biblioteką standardową, gcc zrobi to, co należy; ale wtedy, tak samo jak g++. Więc naprawdę nie ma powodu, aby nie używać g++ do ogólnego rozwoju 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
2008-10-06 00:51:10
Zainteresowałem się tym zagadnieniem i przeprowadziłem kilka eksperymentów
Znalazłem ten opis tutaj , ale jest bardzo krótki.
-
Potem próbowałem eksperymentować z gcc.exe i G++.exe na moim komputerze z windows:
$ g++ --version | head -n1 g++.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3 $ gcc --version | head -n1 gcc.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
-
Próbowałem skompilować proste pliki testowe c89, c99 i c++1998 i działa dobrze dla mnie z poprawnymi rozszerzeniami pasującymi do języka
gcc -std=c99 test_c99.c gcc -std=c89 test_c89.c g++ -std=c++98 test_cpp.cpp gcc -std=c++98 test_cpp.cpp
-
Ale kiedy próbuję uruchomić " gnu compiler kolekcja " tool in that fashion:
$ gcc -std=c++98 test_cpp.c cc1.exe: warning: command line option '-std=c++98' is valid for C++/ObjC++ but not for C [enabled by default]
-
Ale ten nadal działa bez błędów
$ gcc -x c++ -std=c++98 test_cpp.c
-
I to również
$ g++ -std=c++0x test_cpp_11.cpp
P. S. pliki testowe
$ cat test_c89.c test_c99.c test_cpp.cpp
// C89 compatible file
int main()
{
int x[] = {0, 2};
return sizeof(x);
}
// C99 compatible file
int main()
{
int x[] = {[1]=2};
return sizeof(x);
}
// C++1998,2003 compatible file
class X{};
int main()
{
X x;
return sizeof(x);
}
// C++11
#include <vector>
enum class Color : int{red,green,blue}; // scoped enum
int main()
{
std::vector<int> a {1,2,3}; // bracket initialization
return 0;
}
Wyniki:
Jeśli spojrzeć na drzewo procesów, to wydaje się, że gcc, a g++ jest backendem do innych narzędzi, które w moim środowisku są: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe
Gcc działa dobrze jako metatool Dla jeśli masz popraw rozszerzenie lub ustaw popraw - flagi std-X. Zobacz to
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
2016-03-02 16:54:44
" GCC " jest powszechnym skrótem dla GNU Compiler Collection. Jest to zarówno najbardziej ogólna nazwa kompilatora, jak i nazwa używana, gdy nacisk kładzie się na kompilowanie programów w języku C (jako skrót dawniej oznaczał "GNU C Compiler").
W odniesieniu do kompilacji C++, zwykle nazywa się kompilator " G++". Ponieważ istnieje tylko jeden kompilator, poprawne jest również nazywanie go " GCC "bez względu na kontekst języka; jednak termin "G++" jest bardziej przydatny, gdy nacisk jest na kompilacji programów C++.
Możesz przeczytać więcej tutaj .
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
2016-02-15 14:11:38
Jedyną zauważalną różnicą jest to, że jeśli przekażesz .c
do gcc, będzie on kompilowany jako C, podczas gdy g++ zawsze będzie traktował go jako 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
2018-08-16 07:35:35
Testowałem gcc i G++ w systemie linux. Używając MAKEFILE, mogę zdefiniować compliler używany przez "GNU make". Testowałem z tak zwaną "pamięcią dynamiczną" funkcji lokalizującej "C plus plus" przez:
int main(){
int * myptr = new int;
* myptr = 1;
printf("myptr[0] is %i\n",*myptr);
return 0;
}
Tylko g++ może pomyślnie skompilować na moim komputerze, podczas gdy gcc zgłosi błąd
undefined reference to `operator new(unsigned long)'
Więc mój wniosek jest taki, że gcc Nie w pełni popiera "C plus plus". wydaje się, że wybór g++ dla plików źródłowych C++ jest lepszą opcją.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
2016-11-02 20:45:15
GCC i G ++ są kompilatorami GNU. Kompilują c i C++. Różnica dotyczy *.pliki c gcc traktuje go jako program c, A g++ widzi go jako program c++. *.pliki cpp są uważane za programy c ++. c++ jest super zestawem c i składnia jest bardziej rygorystyczna, więc uważaj na sufiks.
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
2014-08-12 08:44:41