首页 > 技术文章 > gcc/g++

YHM07 2014-09-07 10:40 原文

编译器使用

参考:《UNIX 系统与 软件开发 》中国铁道出版设 邵国金主编 第十章 编程基础篇

一、gcc/g++所用文件扩展名约定

扩展名
文件类型
扩展名
文件类型
.c
C语言源代码
.S
未预处理的汇编程序
.C,.cp,.cc,.c++,.cpp
c++语言源代码
.h
头文件
.i
预处理后的c源代码文件
.o
目标文件
.ii
预处理后的cpp源代码文件
.a
静态库文件
.s
预处理后的汇编程序
.so
共享库文件

二、gcc/g++用法

       gcc/g++常用格式:

       gcc/g++

                      [-E] [-S] [-c] [-s] [-v] [-I(upper(i))dir ...] [-Ldir ...] [-l(lower(L))libname]

                      [-static] [-shared] [-rdynamic]      [-D macro[=defn] ...]   [-Umacro]

                      [-fopt ...] [ -Wwarn ...]   [-x language]     [-mmachine-option ...]

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

      编译器gcc/g++ 按命令行选项指定到功能对源文件infill 进行编译处理,参数选项如下。

参数
意义
-E
只对文件进行预处理,不进行编译和链接,可用-o指定输出文件
-S
仅在预处理后输出汇编语言文件*.s,可用-o指定输出文件
-c
仅在编译后生成同主名的*.o型到目标文件,可用-o指定输出文件
-s
生成可执行文件时,删除符号表和重定位信息(生成成品软件时使用或不使用
-g
在可执行文件中加入调试信息(调试时使用)
-o outfile
指定输出文件名。生成可执行文件时,若不指定则默认生成a.out
-Idir
将目录dir添加到头文件搜索范围
-Ldir
将目录dir添加到库文件搜索范围
-lname
指定要链接的库名
-mmachine-option
与硬件相关到选项
-Olevel
编译时进行优化
-static
禁止使用共享库(动态链接库)
-shared
生成共享库
-rdynamic
通知连接器将所有符号添加到动态符号表中
-Dname[=val]
宏定义变量name[=val]
-Uname
取消宏定义变量name
-x language
指定前端语言
-v
显示gcc版本
-Wwarn
警告信息控制,例如-Wall
-fopt
-f选项又很多,例如 -fpic/-fPIC 用于生成位置无关代码
@file
用于从file中读取选项

三、gcc/g++的工作工程

            gcc/g++将一个c/c++程序编译成可执行程序要经过四个步骤:预处理,编译,汇编,连接。

       

            c/c++源代码 -> 预处理 -> c/c++编译程序 -> 汇编代码 -> 汇编程序 -> 目标代码 -> 连接程序 -> 可执行代码    


预处理 (-E) 使用-ofile指定输出文件,否则预处理结果输出到屏幕,此部分工作由预处理程序cpp(C Preprocesor )完成。

编译 (-S)使用-ofile指定输出文件,否则生成同名的.s文件,此部分工作由编译程序gcc完成。

汇编(-c)使用-ofile指定输出文件,否则生成同名的.o文件,此部分工作由汇编程序ac (assembler)完成。

连接  使用-ofile指定输出文件,否则生成文件名为a.out的可执行程序,此部分工作由连接程序ld完成



  


推荐阅读