Diferença entre gcc e g++ [RESOLVIDO]

1. Diferença entre gcc e g++ [RESOLVIDO]

Fabiano Vasconcelos
NewWave

(usa Ubuntu)

Enviado em 09/01/2011 - 20:02h

Muito bem, galera.
Como me é de praxe, eu só faço perguntas quando a pesquisa não é possível ou quando eu não encontrei nada na pesquisa.
Estava eu pesquisando a diferença entre os compiladores gcc e g++, quando no site

http://forums.fedoraforum.org/archive/index.php/t-45673.html

me deparei com a seguinte assertiva:

"The major difference between using 'g++' or 'gcc' commands with C++ programs is in linking. 'g++' will automatically link the code with the C++ runtime library (libstdc++), but you must include it manually if you use 'gcc' or 'ld'."

ou seja,

"A principal diferença entre usar 'g++' ou 'gcc' com programas C++ é na hora de linkar. 'g++' irá automaticamente linkar o código com a 'C++ runtime library' (libstdc++), mas você deve incluí-la manualmente se você usar 'gcc' ou 'ld'."

esta assertiva ainda é válida, haja visto que o post é de 2005?

Um grande abraço a todos!
Muita paz!

Fabiano Vasconcelos


  


2. MELHOR RESPOSTA

Rodrigo Chaves
stilldre

(usa Funtoo)

Enviado em 09/01/2011 - 23:11h

o g++ é um compilador integrante da gcc (Gnu Compiler Collection)...

3. Re: Diferença entre gcc e g++ [RESOLVIDO]

André
andrezc

(usa Debian)

Enviado em 09/01/2011 - 20:27h

Sim, ainda é valida. Só um exemplo: eu, com meu gcc versão 4.3.2, vou compilar um código pequeno em C++.

[email protected]:~$ gcc soma.cpp -o soma
/tmp/ccjMkGpq.o: In function `__static_initialization_and_destruction_0(int, int)':
soma.cpp:(.text+0x33): undefined reference to `std::ios_base::Init::Init()'
soma.cpp:(.text+0x38): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccjMkGpq.o: In function `main':
soma.cpp:(.text+0xb7): undefined reference to `std::cout'
soma.cpp:(.text+0xbc): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
soma.cpp:(.text+0xc8): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
soma.cpp:(.text+0xd0): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
soma.cpp:(.text+0xd7): undefined reference to `std::cout'
soma.cpp:(.text+0xdc): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
/tmp/ccjMkGpq.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

agora o mesmo código ao compilar com o g++ versão 4.3.2:

[email protected]:~$ g++ soma.cpp -o soma
[email protected]:~$

sem erro nenhum.




4. Re: Diferença entre gcc e g++ [RESOLVIDO]

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 09/01/2011 - 20:35h

para responder sua questão, há um conceito que precisa ser entendido:
quando você invoca gcc ou g++ em seu shell, não está invocando o compilador, mas sim a interface com o que chamamos front-end do compilador. esta interface chamamos de driver. o papel do driver é tão somente receber do usuário os requisitos e opções (aka flags) com que o compilador irá traduzir o seu código ativando e/ou desativando para tanto os subsistemas envolvidos. este processo vai se ramificando desde o pré-processamento do seu código até chegar em seu binário final, e consiste em invocar, agora sim, o compilador (cc1 para c, cc1plus para c++) em suas diversas fases, incluindo a montagem (as), e então finalmente o linker (collect2 e ld).
dito isso, é fácil deduzir que cada driver irá direcionar seu comando para o compilador específico para o qual foi projetado. logo, a resposta à sua pergunta é sim, a assertiva é válida; gcc irá direcionar seu código para o compilador c, e g++ para o compilador c++, com suas respectivas bibliotecas padrão, embora isso não seja imutável, através de flags e certos modificadores no prórpio código, como #pragma e __attribute__


5. Re: Diferença entre gcc e g++ [RESOLVIDO]

Fabiano Vasconcelos
NewWave

(usa Ubuntu)

Enviado em 09/01/2011 - 21:31h

Muito bem. Vejam a raíz do meu questionamento: lendo "Programming Linux Games", By John R. Hall, Loki Software & Linux Press Journal, última edição, pág. 39, me deparei com o seguinte texto sobre GCC:

"It was developed by the Free Software Foundation for the GNU project, and it is available on many platforms. gcc is free software, and it is included as a standard component of nearly every Linux Distribution. There are several other C/C++ compilers for Linux (such as Kai C++ and the as-yet-unreleased Metrowerks CodeWarrior), but gcc is used for the vast majority of Linux software development. Some eschew gcc (and its C++ brother, g++) as quirky or incomplete, but in reality it’s at least as good as the other mainstream C compilers."

o que me causou muito espanto quando o autor diferencia os compiladores e rotula o g++ como "incompleto" e "peculiar".
Então, resumindo: devo compilar programas em C++ usando g++ ou gcc? Agora entornou o caldo! Hehehhehehe...

Muita paz!

Fabiano Vasconcelos


6. "Então, resumindo: devo compilar programas em C++ usando g++ ou gcc? "

André
andrezc

(usa Debian)

Enviado em 09/01/2011 - 21:36h

O gcc tem suporte a C++ (e até outras linguagens), mas o ideal é com o g++.


7. Re: Diferença entre gcc e g++ [RESOLVIDO]

Fabiano Vasconcelos
NewWave

(usa Ubuntu)

Enviado em 10/01/2011 - 09:08h

Esclarecido! :D
Sou obrigado e escolher a melhor resposta mesmo? Vou ficar constrangido com isso, porque as respostas foram muito boas e todos me ajudaram. Vou escolher como melhor resposta a do stilldre, só pra constar, mas todo mundo aqui me ajudou bastante!

Obrigado a todos!!!

Boa semana e muita paz!