GNU编译套件(GNU Compiler Collection),GPL许可发行的自由软件.大多数Unix操作系统采纳为标准编译器,同时也适用于Win
gcc -E 得.i 调用cpp
预处理(头文件展开,宏替换)
gcc -S 得.s 调用gcc本身
汇编语言
gcc -c 得到.o 调用as
编译成二进制文件
gcc -o得到.o 调用ld(链接libc)
这一步是链接
gcc后用file
查看
gcc参数 | 描述 |
---|---|
-I | 编译时所包含的头文件路径(其实改c文件中include的路径也行) |
-L | 包含库的路径 |
-l | 指定库名,比如xx.so 或xx.a |
-o | 指定生成的文件名 |
-D | 相当于defn ,指定宏编译 |
-g | gdb模式,可以调试 |
-lstdc++ | 编译c++代码,一般使用g++ |
Wall | 显示更多的警告 |
-O | 优化等级(1,2,3),就是内联函数 |
-E | 头文件展开,宏替换 |
-S | 编译成汇编 |
编译C
例子:
假设有以下的文件
|-- fn
| `-- add.c
|-- h
| `-- head.h
`-- test.c
test.c文件内容
#include "head.h"
#define DEBUG 0 //为了下面写宏的展示
int main(void)
{
int a =1, b = 2;
int c;//使用-Wall参数会警告该参数没有初始化
#ifdef DEBUG //如果定义了DEBUG则会执行以下的
printf("hello C\n");
#endif
printf("%d\n",add(a,b));
return 0;
}
add.c 内容
int add(int a,int b){
return a+b;
}
head.h内容
#include <stdio.h>
extern int add(int a,int b);
使用以下命令进行编译
claroja@claroja:~/gcc$ gcc test.c ./fn/add.c -I ./h -Wall -o test
test.c: In function ‘main’:
test.c:6:6: warning: unused variable ‘c’ [-Wunused-variable]
int c;
1.test.c和fn目录下add.c一起编译(因为test.c调用了add.c,注意add.c要加路径)
2.-I
参数指明了头文件的路径
编译C++
#include <iostream>
using namespace std;
int main(){
cout << "Hello C++" << endl;
return 0;
}
g++ test.cpp -o testcpp