频道栏目
首页 > 资讯 > 其他 > 正文

什么是gcc/g++?gcc/g++ 的使用方式

17-11-02        来源:[db:作者]  
收藏   我要投稿

1、什么是gcc/g++?

gcc / g++ 是gnu中的c / c++编译器 。

gcc 常用于编译c文件,g++常用于编译c++.

编译器是根据gcc还是g++来确定,是按照C标准还是C++标准编译链接。

gcc 能够编译三种语言:C、C++ 和 Object C(C 语言的一种面向对象扩展),利用 gcc 命令可同时编译并连接 C 和 C++ 源程序。

但是,gcc 命令只能编译 C++ 源文件,而不能自动连接 C++ 程序使用的库。因此,通常使用 g++ 命令来完成 C++ 程序的编译和连接,该命令会自动调用 gcc 实现编译。

2、gcc/g++ 的使用方式

gcc/g++ [option] files

(使用 man g++,可以查阅说明文件)

NAME

gcc - GNU project C and C++ compiler

SYNOPSIS

gcc [-c|-S|-E] [-std=standard]

[-g] [-pg] [-Olevel]

[-Wwarn...] [-Wpedantic]

[-Idir...] [-Ldir...]

[-Dmacro[=defn]...] [-Umacro]

[-foption...] [-mmachine-option...]

[-o outfile] [@file] infile...

Only the most useful options are listed here; see below for the remainder. g++ accepts mostly the same options as gcc.

编译源文件,生成可执行文件,需要以下4步:

1)预处理,生成.i的文件[预处理器cpp]

比如,g++ -E main.cpp >main.i

执行后,就会生成main.i 文件

2)将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs]

比如,g++ -S main.cpp

执行后,就会生成main.s 文件

3)由汇编变为目标代码(机器代码)生成.o的文件[汇编器as]

比如,g++ -c main.cpp

执行后,就会生成main.o 文件

4)连接目标代码,生成可执行程序[链接器ld]

g++ main.o -L F:\vs2008\VC\include\iostream

将.o文件与所需的库文件链接整合形成.exe文件,这就是可执行文件。

常用options

-E

只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.

-S

只激活预处理和编译,就是指把文件编译成为汇编代码

-c

只激活预处理,编译,和汇编,也就是只把程序生成obj文件

-o

制定目标名称,缺省的时候,gcc 编译出来的文件是a.out。

-Dmacro

相当于C语言中的#define macro

-Dmacro=defn

相当于C语言中的#define macro=defn

-Umacro

相当于C语言中的#undef macro

-undef

取消对任何非标准宏的定义

-Idir

在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,会到缺省的头文件目录找,如果使用-I制定了目录,

会先在你所制定的目录查找,然后再按常规的顺序去找.

对于#include,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺省的头文件目录查找

-I-

就是取消前一个参数的功能,所以一般在-Idir之后使用

-C

在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的

-M

生成文件关联的信息。包含目标文件所依赖的所有源代码你可以用gcc -M hello.c来测试一下,很简单。

-MM

和上面的那个一样,但是它将忽略由#include造成的依赖关系。

-MD

和-M相同,但是输出将导入到.d的文件里面

-MMD

和-MM相同,但是输出将导入到.d的文件里面

-llibrary

制定编译的时候使用的库

-Ldir

制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然

编译器将只在标准库的目录找。这个dir就是目录的名称。

-include file

包含某个代码,简单来说,就是方便某个文件,需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用#include

-O0

-O1

-O2

-O3

编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

-g

只是编译器,在编译的时候,产生调试信息。

-ggdb

此选项将尽可能的生成gdb的可以使用的调试信息

-static

此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么

动态连接库,就可以运行.

-share

此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.

-traditional

试图让编译器支持传统的C语言特性

备注:

在编译过程中,gcc/g++会给我们报各种错误。主要集中在编译和链接两步。

语法错误和声明问题会在编译这一步给出。定义问题会在链接这一步给出。

3/执行可执行程序

./main.exe

相关TAG标签
上一篇:JAVA Math函数向上取整和向下取整的教程
下一篇:核桃的数量“编程题”
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站