part1:13-linux编译器GCC
Gcc特点
Gcc基本用法
1、gcc的概念
GCC(GNU Compiler Collection,GNU编译器套装),是一款由GNU开发的编程语言编译器。GCC原名为GNU C 语言编译器,因为它原本只能处理C语言。GCC很快地扩展,变得可处理C++。之后也变得可处理Fortran、Pascal、Objective-C、java,以及Ada与其他语言。
2、GCC的执行过程
使用GCC,把C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤:预处理(也称为预编译,Preprocessing)、编译(compilation)、汇编(assembly)、和链接(linking)。
命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成以后,gcc就调用ld来完成最后的关键性工作,这个阶段就是链接。在链接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时该程序所调用的库函数也从各自所在的库中连到合适的地方。以上这些过程是gcc内部实现的机制,实际使用中,上述过程可以通过gcc的选项实现。
gcc命令的一般格式为:gcc [选项] 要编译的文件 [选项] [目标文件] eg:gcc hello.c -o hello;本过程实际上将预处理、编译、汇编、链接一步完成。下面分别介绍每个流程
执行预处理工作:gcc -E hello.c -o hello.i 生成hello.i
执行编译处理工作:gcc -S hello.i -o hello.s生成汇编文件hello.s
执行编译工作:gcc -c hello.s -o hello.o 对hello.s进行汇编,生成目标文件hello.o
执行链接工作:gcc hello.o -o hello
编译选项
使用-g选项,在可执行程序中包含标准调试信息。使用命令gcc -g hello.c -o hello2生成包含调试信息的文件hello2,带有调试信息的可执行文件可以使用gdb调试器进行调试。
使用-D选项,在编译时进行宏定义。使用命令gcc -DLINUX hello.c -o hello3生成了宏LINUX的可执行文件hello3。
使用-O2选项,完成程序的优化工作。
time ./hello 测试hello可执行文件的执行时间。
-Wall:生成所有的警告信息
-w:不生成任何警告信息
-DMACRO:使用-D定义MACRO宏,等效于在程序中使用#define MACRO
每一个编译器都有标准的寻找头文件的路径!!!!gcc会在/usr/include/下面去找
-I dirname:将dirname所指出的目录作为编译器寻找头文件的标准路径。对于<>,gcc在系统预设的头文件目录(如/usr/include)中搜寻相应的文件;而对于"",gcc在当前目录中搜寻头文件。-I作用是告诉gcc,如果在当前目录未找到需要的头文件,就到指定的dirname目录中去寻找:eg:gcc foo.c -I /home/include -o foo
-static 将产生一个和static库一道链接的可执行文件。当没有开启-static选项时,链接器首先试着用共享库,假如共享版本不可用,然后再试着用静态库。
-shared 告诉gcc产生一个共享库,该共享库能在链接时和其他的共享文件一起形成可执行文件,该共享库也能在运行时装载进可执行文件的地址空间,使用-shared是创建一个共享ELF库的首选方法。
part1:13-linux编译器GCC的更多相关文章
- Linux 之 编译器 gcc/g++参数详解
2016年12月9日16:48:53 ----------------------------- 内容目录: [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++ ...
- 【Linux开发】如何在./configure的时候将编译参数传入,改变默认的编译器gcc成arm-linux-gcc
如何在configure时,将编译参数传入,改变默认的编译器gcc成arm-linux-gcc [问题] 想要用交叉编译工具arm-linux-gcc去编译lrzsz, 但是在./configure的 ...
- MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本
本文主要讲述如何安装 C语言 编译器——MinGW-w64,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用. 编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他 ...
- MinGW安装教程——著名C/C++编译器GCC的Windows版本
前言本文主要讲述如何安装 C语言 编译器——MinGW,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用. 编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他人更 ...
- 《⑨也懂系列:MinGW-w64安装教程》著名C/C++编译器GCC的Windows版本(MinGW-w64在安装的时候可以选择版本,有图,一步一步)
发布日期 2016年10月31日 分类 教程 标签 编程.软件 前言<⑨也懂系列:MinGW-w64安装教程>这篇文章由 rsreland (http://rsreland.net)于 2 ...
- Linux下Gcc生成和使用静态库和动态库详解
参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...
- 详解Linux安装GCC方法
转载自:http://blog.csdn.net/bulljordan23/article/details/7723495/ 下载: http://ftp.gnu.org/gnu/gcc/gcc-4. ...
- linux 安装gcc和g++
linux中安装gcc和g++ 今天在linux的服务器上安装C/C++的编译器gcc和g++,运行了如下两条命令: 1 yum install gcc yum install g++ 然后发现gcc ...
- 在Linux使用GCC编译C语言共享库
在Linux使用GCC编译C语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...
随机推荐
- leetcode166
public class Solution { public String fractionToDecimal(int numerator, int denominator) { HashMap< ...
- SourceTree使用方法
一 .SourceTree简介 SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端,拥有可视化界面,容易上手操作.同时它也是Mercurial和Subve ...
- Eclipse launch configuration----Eclipse运行外部工具
虽然我们已经有了像 Eclipse 这样高级的 IDE,但是我们有时候也是需要在开发的时候使用 Windows 的命令行,来运行一些独立的程序.在两个程序中切换来切换去是很麻烦的.所以 Eclipse ...
- python中 cmp
python3.*版本中取消了数值之间的比较:cmp(x, y).取而代之的是 (x > y) - (x < y) 因为python中 false 为 0, true 为 1.
- spring事务没回滚
最近遇见一个问题,用spring管理实务,在service层处理数据,保存数据时出现异常,但没有回滚,检查了一下,发现是因为我用try catch将异常进行捕获了,没有抛出导致的:默认spring事务 ...
- mysql使用一条sql删除多条数据
使用in delete from course where chour in(55,56,57); course:表名 chour:字段 55,56,57数据
- 使用FIO测试磁盘iops
我们如何衡量一个存储的性能呢?IOPS(Input/Output OperationsPer Second),即每秒进行读写(I/O)操作的次数是国际上通用的存储性能衡量标准,IOPS越高意味着在同一 ...
- python-最好大学排名
# -*- coding: utf-8 -*-"""Created on Mon Apr 3 09:37:52 2017 @author: zuihaodaxuepaim ...
- struts2 自带的 token防止表单重复提交拦截器
在struts2中,我们可以利用struts2自带的token拦截器轻松实现防止表单重复提交功能! 1. 在相应的action配置中增加: <interceptor-ref name=&quo ...
- webdriver自动化脚本
1.需求如下: 启动火狐浏览器首先打开百度,等待3秒然后打开博客首页,等待2秒然后关闭浏览器 from selenium import webdriver from time import sleep ...