GCC 原名为 GNU C语言编译器(GNU C Compiler)。
GCC(GNU Compiler Collection, GNU编译器套件)是由 GNU 开发的编程语言编译器。(注意: GCC 与 gcc 是不同的,GCC是GNU编译器套件,gcc 是 GNU C语言编译器)。
GNU 编译器套件包括 C、 C++、 Objective-C、 Java、 Ada 和 Go 语言前端,也包括了这些语言的(如 libstdc++, libgcj等),也就是说 gcc 有很多兄弟姐妹,比如:g++ ,GCJ等
gcc 和 g++ 在编译阶段, g++ 会调用 gcc,对于 C++ 代码,两者是等价的。但是因为 gcc 命令不能自动和 C++ 程序使用的库联接,所以通常用 g++ 来完成对C++程序代码的链接。
gcc 与 g++的区别,可以简单的理解为 编译 C 程序使用 gcc ; 编译C++程序用g++。
一、gcc/g++ 工作的流程
windows下的可执行文件是.exe,Linux下的可执行文件是.out
二、gcc/g++ 常用参数选项
三、使用方式如下:
使用下面的 一段 测试代码, 文件名 叫 test.cpp :
#include<iostream>
#define PI 3.1415926
using namespace std;
int main(){
int sum = PI + 10 ;
cout<<"Hello"<<sum<<endl;
return 0;
}
1. gcc/g++ 编译选项 -E
假设编译 test.cpp,则生成 预处理文件 test.i 的 指令是:
预处理 会 将 宏定义 替换到 代码中 ; 会删除与代码运行无关的注释。
g++ test.cpp -E -o test.i
2.gcc/g++ 编译选项 -S
生成 汇编文件 test.s 的指令是:
g++ test.cpp -S -o test.s
(注意: -o 是 小写 )
3.gcc/g++ 编译选项 -c
编译汇编的源文件,生成 test.o ,test.o不是可执行文件:
g++ test.s -c -o test.o
4.gcc/g++ 编译选项 -o
生成可执行文件( .out )
第一种写法:
[file1] -o [file2]
g++ test.o -o test.out
或者 生成不带文件类型的二进制可执行文件 test:
g++ test.o -o test
还有另外一种写法:
-o [file2] [file1]
file2 是生成文件 , file1 是 依赖文件。
g++ -o test test.cpp
也可以 直接执行生成 汇编文件 ; 直接生成可执行文件,默认生成 a.out
5.gcc/g++ 编译选项 -D
通过指令,增加预编译宏,作用于程序
gcc test.c -o test -D [ 宏 ]
例如,下面的程序 ,文件名是 test.c :
#include <stdio.h>
int main()
{
int a = 100;
#ifdef DEBUG
printf("Hello ,It is my code\n");
#endif
for(int i =0 ;i<3 ;++i)
{
printf("Hello GCC\n");
}
return 0;
}
通过指令,增加宏定义,用于执行相关的程序:
6.gcc/g++ 编译选项 -Wall
生成所有警告信息
gcc test.c -o test -Wall
生成的警告信息,会在终端中显示出来:
7.gcc/g++ 编译选项 -On ( n为 0~3 )
编译器 优化代码 的选项
gcc test.c -o test -O3
优化举例:
比如下面的声明的变量:
int b,c,d,e;
b = 10;
c = b;
d = c;
e = d;
优化后相当于:
int b,c,d,e;
b = 10;
c = 10;
d = 10;
e = 10;
隐藏了代码变量之间的关系,防止反汇编等操作。
【Linux高并发服务器开发】 坚持的 第一天 ,加油 !!