GCC知识

简介:

像C语言这样的静态语言,运行的步骤是先将C经过编译器转化成汇编语言,汇编语言再经过汇编器转化成机器语言模块,然后链接器将程序的机器语言模块和库程序的机器语言模块和起来,生成可执行文件,最后再由加载器加载这个可执行文件,产生输入输出。

 

在这个环节中,gcc就是扮演着编译器的角色。gcc原本只能编译C语言,但是后来,经过扩展之后也能处理JAVA/OC等语言了。GCC现在已经成为类Unix操作系统的标准编译器了。所以在linux上源码编译软件前大都要先安装gcc。

gcc只是编译器吗?

gcc可以完成从高级语言C变为和执行文件.out的过程。它默认也是有编译链接的功能。gcc有个参数-c 是来控制是否要链接成可执行文件。编译C之后会生成.o的目标文件,链接之后会生成.out的可执行文件。

gcc在这个过程中虽然只是完成编译工作,但是它会调用汇编器(as),链接器(ld)来完成整个代码编译解释过程。

GNU其他工具?

gdb(GNU除错器)也是GNU工程开发出来的调试工具。能对GCC编译链接出来的可执行文件进行定点调试。

gprof(GNU测量器)是测试程序中函数的性能的工具。

g++(C++编译器)和gcc差不多,只是目标语言是c++。

参数

网上的gcc参数的例子很多,比如:http://www.shanghai.ws/gnu/gcc_1.htm。我们直接拿一个例子看一下

比如go/src/make.bash中有一个gcc生成dist的例子:

gcc mflagO2WallWerrorggdbocmd/dist/distIcmd/dist"mflag−O2−Wall−Werror−ggdb−ocmd/dist/dist−Icmd/dist"DEFGOROOT" cmd/dist/*.c

将其中的参数按照上下文转换后如下:

gcc -m64 -O2 -Wall -Werror -ggdb -o cmd/dist/dist -Icmd/dist -DGOROOT_FINAL="$GOROOT_FINAL" cmd/dist/*.c

gcc的参数很多,种类分为几种:

Image(2)

上图参考自http://www.shanghai.ws/gnu/gcc_1.htm

参考文章:http://tigcc.ticalc.org/doc/comopts.html

 

-m64:配置相关选项,代表这个程序的宿主机器cpu架构是amd64

-O2: 优化选项,对程序进行O2级别的优化

-Wall: 警告选项,生成所有警告信息

-Werror: 警告选项,将所有warning当作error处理

-ggdb: 调试选项,编译过程生成调试信息,以便gdb进行调试。

-o: 总体选项,制定生成的可执行文件。如果不指定的话,就默认是xx.out

-I: 目录选项,进行头文件查询的时候被指定的目录也需要进行搜索

-DGOROOT_FINAL="$GOROOT_FINAL" 这个是在预处理过程的时候设置GOROOT_FINAL

最后的cmd/dist/*.c就是源文件了,表示源文件是这个目录下的所有.c文件





本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2013/01/17/2863903.html,如需转载请自行联系原作者

相关文章
|
2月前
|
NoSQL 编译器 开发工具
006.gcc编译器
gcc是什么?
32 0
006.gcc编译器
|
3月前
|
存储 NoSQL 算法
从一个crash问题展开,探索gcc编译优化细节
问题分析的过程也正是技术成长之路,本文以一个gcc编译优化引发的crash为切入点,逐步展开对编译器优化细节的探索之路,在分析过程中打开了新世界的大门……
339 1
|
13天前
|
编译器 C语言
gcc/g++语法
gcc/g++语法
|
3月前
|
C语言
gcc静态编译/usr/bin/ld: cannot find -lc
gcc静态编译/usr/bin/ld: cannot find -lc
|
4月前
|
编译器 程序员 C语言
gcc的编译过程和gcc与g++的区别
gcc的编译过程和gcc与g++的区别
46 0
|
5月前
|
C语言
编译安装gcc
编译安装gcc
|
5月前
|
C语言 C++
cygwin的下的gcc的一点体会。
cygwin的下的gcc的一点体会。
|
7月前
|
C语言
安装mujoco报错:distutils.errors.DistutilsExecError: command ‘gcc‘ failed with exit status 1
安装mujoco报错:distutils.errors.DistutilsExecError: command ‘gcc‘ failed with exit status 1
179 0
|
8月前
|
自然语言处理 编译器 Linux
gcc编译的过程
GCC 仅仅是一个编译器,没有界面,必须在命令行模式下使用。通过 gcc 命令就可以将源文件编译成可执行文件。
123 0
|
9月前
|
编译器 C语言 C++
Gcc 与 G++的区别(通俗易懂)
Gcc 与 G++的区别(通俗易懂)