Linux environment GNU, GCC, g++ compiler

Source: Internet
Author: User

One, GNU

GNU is the "GNU's not Unix" recursive abbreviation, Stallman announced that GNU should pronounce Guh-noo (slave) to avoid confusion with the word new (note: GNU in English is intended to be the African wildebeest, the same pronunciation as new)

In order to ensure that GNU software is free to "use, reproduce, modify and distribute", all GNU software is licensed under the terms of an agreement that authorizes all rights to anyone without the addition of any restrictions to any other person, the GNU General Public License (GNU LICENSE,GPL). This is known as the "anti-copyright" (or called copyleft) concept.

The gun can be understood as a Linux specification.

Second, the difference between GCC and g++

Both GCC and g++ are a compiler for the GNU (Organization). There are many misconceptions about their understanding:


"Misunderstanding one" GCC can only compile C code, g++ can only compile C + + code

Both are possible, but please note:
1. The suffix is. C, GCC treats it as a C program, and g++ as a C + + program; the suffix is. cpp, both of which are considered C + + programs, note that although C + + is a superset of C, there are different requirements for syntax, such as:
#include

int main (int argc, char* argv[])

{

if (argv = = 0) return;
Printstring (argv);
Return

}


int printstring (char* string)

{

sprintf (String, "This is a test.\n");

}


If you follow the grammar rules of C, OK, no problem, but once the suffix is changed to CPP, three errors are reported immediately: "Printstring undefined";
"cannot convert ' char** ' to ' char*";
"return-statement with no value";
corresponds to the part of the previous red callout, respectively. Visual C + + syntax rules are more rigorous.


2. During the compile phase, g++ calls GCC, which is equivalent to C + + code, but because the GCC command is not automatically linked to the libraries used by C + + programs, it is usually done with g++ to complete the link, for the sake of unification, simply compile/link all with g++, which gives an illusion, As if the CPP program can only be used g++.

"Myth two": GCC does not define __cplusplus macros, and g++ will
in fact, this macro simply indicates that the compiler will interpret the code in C or C + + syntax, as described above, if the suffix is. c, and the GCC compiler is used, the macro is undefined, otherwise it is defined.

"Misunderstanding three": Compile only with GCC, link only with g++
strictly speaking, this sentence is not wrong, but it confuses the concept, it should be said: Compile can be used gcc/g++, and links can be used g++ or gcc-lstdc++. Because GCC commands are not automatically joined to libraries that are used by C + + programs, you typically use g++ to complete joins. In the compilation phase, however, g++ automatically calls GCC, which is equivalent.

"Misunderstanding four": extern "C" is related to gcc/g++
in fact, no matter whether it is GCC or g++, with the extern "C", all are named in C to the symbol, otherwise, are named in C + +. The test is as follows:
me.h:
extern "C" void cppprintf (void);

Me.cpp:
#include
#include "me.h"
using namespace std;
void cppprintf (void)
{
cout
#include
#include "me.h"
int main (void)
{
cppprintf ();
return 0;
}

1. First add extern "C" to me.h, see what is different with GCC and g++ naming
[email protected] g++]# g++-S Me.cpp
[email protected] g++]# less ME.S
. Globl _Z9CPPPRINTFV//Note the naming of this function
. Type cppprintf, @function
[email protected] gcc]# gcc-s me.cpp
[email protected] gcc]# less ME.S
. Globl _Z9CPPPRINTFV//Note the naming of this function
. Type cppprintf, @function
exactly the same!

2. Remove the extern "C" in the me.h to see what is different with GCC and g++ naming
[email protected] gcc]# gcc-s me.cpp
[email protected] gcc]# less ME.S
. Globl _Z9CPPPRINTFV//Note the naming of this function
. Type _Z9CPPPRINTFV, @function
[email protected] g++]# g++-S Me.cpp
[email protected] g++]# less ME.S
. Globl _Z9CPPPRINTFV//Note the naming of this function
. Type _Z9CPPPRINTFV, @function
exactly the same!
It can be seen that extern "C" is not related to the use of gcc/g++, the above test also indirectly confirms the previous statement: in the compilation phase, g++ is called GCC.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.