GCC编译器
详见《gcc中文手册》
编译过程
预处理器cpp 编译器gcc 汇编器as 链接器linker
file.c -------------> file.i ------------->file.s ----------->file.o -------------->file.out
file.h libc.a
gcc选项概述
man gcc 查看更多选项信息
gcc [options] [filename]
-x language
-c 只对文件进行编译和汇编,不链接
-S 只对文件进行编译,不汇编和链接
-E 只对文件进行预处理
-o [file] file2
-lname (小写L)用来指定所使用的库文件 例:-lm 使用libm.a (m就是库的名称)
-Idirname 将dirname所指出的目录加入到程序头文件目录列表中
例:gcc foo.c -I /home/include -o foo
-Ldirname 将dirname所指出的目录加到库文件的目录列表中。
例:gcc foo.c -L /home/lib -lfoo -o foo
-static 静态链接(将库的内容加入程序中,形成完整的可执行程序)
-w 禁止生成警告信息
-Wall 显示附加的警告信息
-Dmacro 定义MACRO宏,等效于在程序中使用#define MACRO
例:gcc -DDEBUG hello.c -o hello
gcc -DNUM=2 hello.c -o hello
-pedantic 严格要求符合ANSI标准
-g 添加调试信息
-p 产生prof所需的信息
-pg 产生gpof所使用的信息
-O(-O1) 对编译出的代码进行优化
-O2 进行比-O高一级的优化
-O3 产生更高级别的优化
-v
-m*** 根据不同的微处理器进行优化
详解:
gcc -c test.c 生成.o文件
gcc -S test.c 生成汇编文件.s
gcc -E test.c -o test.i 生成.i
gcc -V 2.6.3 -v 强制执行2.6.3版本
gcc -m486 使用对486的相应优化效果
gcc -Wall -o test test.c
gcc -g -Wall -o test3_1 test3_1.c
gcc -ggdb3 -Wall -o test3_1 test3_1.c -ggdb3使用最高级别的调试信息
高级gcc选项
1.管理大型项目(多模块的编译)
gcc -Wall -c -o test3_1 test3_1.c
gcc -Wall -c -o test3_2 test3_2.c
gcc -Wall -c -o test3_3 test3_3.C
gcc -o test test3_1.o test3_2.o test3_3.o
2.指定查找路径 (-I -L)
gcc -Wall -I/usr/include/zw -o test test.c
gcc -Wall -L/usr/X11R6/lib -Wall -o test test.c -IX11
3.链接库(-l) l链接的库可以是静态的也可以是共享的。
gcc -o test test3a.o test3b.o test3.o -lm
4.使用管道(使管道前的输出成为管道后的输入,可以同时调用多个程序) ?
gcc -pipe -Wall -O3 -o test test.c
Gcc编译流程
C预处理 (C预处理器cpp)
Gcc (gcc)
汇编 (as)
文件处理建立静态库 (ar)
GUN链接 (ld)
辅助:
库显示 (ldd)
/*************************
此程序设计的性能很低。用于比较优化前后的性能 导致程序低效的原因:
for循环的结束值及步长每次都要重新计算
five变量没有必要每次循环都为它分配值,只要在循环前做一次赋值即可 **************************/ #include <stdio.h> int main(void)
{
int counter;
int ending;
int temp;
int five;
for(counter=0;counter<2*100000000*9/18+5131;counter+=(5-3)/2)
{
temp=counter/15302;
ending=counter;
five=5;
}
printf("five=%d;ending=%d\n;temp=%d",five,ending,temp);
return 0;
}
带优化与不带优化的编译差别
//test3_2.c 程序优化
gcc -Wall -o test3_2 test3_2.c
time ./test3_2 //查看程序运行时间 gcc -Wall -O1 -o test3_2pro test3_2.c
time ./test3_2pro
GCC编译器的更多相关文章
- 在CentOS 7.2下升级gcc编译器的版本
默认情况下,CentOS 7.2预装的gcc版本是4.8.x,通过执行命令 gcc -v 可以看到,一般情况下这个版本的编译器已经满足需要了,但是某些特殊的时候为了支持C++更高的特性,需要对gcc编 ...
- C语言的编译过程、安装gcc编译器以及设置环境变量
以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1. ...
- 利用GCC编译器生成动态链接库和静态链接库
转载请标明:http://www.cnblogs.com/winifred-tang94/ 1.编译过程 gcc –fPIC –c xxx.c 其中-fPIC是通知gcc编译器产生位置独立的目标代码. ...
- GCC编译器编译链接
在gcc编译器环境下,常见的文件扩展名的含义如下: .c:C源程序,经过预编译后的源程序也为.c文件,它可以通过-E参数输出. .h:头文件 .s:经过编译得到的汇编程序代码,它可以通过-S参数输出. ...
- Linux安装gcc编译器详解
本人使用的是CentOS 6.5 64位系统,由于在安装系统的时候并没有勾选安装gcc编译器,因此需要自行安装gcc编译器. 使用yum安装gcc 对于配备了yum的Linux发行版而言,安装gcc编 ...
- GCC编译器使用
一.GCC简介 通常所说的GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进 ...
- GCC编译器和GDB调试器常用选项
http://blog.csdn.net/u014328976/article/details/46745349 GCC编译器 gcc hello.c -o hello ...
- 临时改GCC编译器,重启后失效
临时改GCC编译器,重启后失效.例如,用如下命令: export CROSS_COMPILE= <gcc 文件所在的目录>/arm-linux-gnueabihf- 本例中使用的命令如下: ...
- windows下安装,配置gcc编译器
在Windows下使用gcc编译器: 1.首先介绍下MinGW MinGW是指仅仅用自由软件来生成纯粹的Win32可运行文件的编译环境,它是Minimalist GNU on Windows的略称. ...
- gcc编译器与基本类型3
C语言发展史 1969年贝尔实验室 肯尼斯·蓝·汤普逊,丹尼斯·李奇开发了B语言 ->Unix,New B语言,改名C语言83年提出C语言标准 1989年十二月正式通过C语言标准,C89标准 C ...
随机推荐
- Setup Factory 打包.netframework 2.0
在setup factory 的安装目录下的Dependencies中新建目录dotnet20/并放入dotnetfx2.0.exe: Dependencies目录中再加xml文件dotnet20.x ...
- libimobiledevice安装步骤
https://github.com/libimobiledevice/libimobiledevice libimobiledevice安装指南,你还不知道libimobiledevice为何物,赶 ...
- hdu 2045
Ps:上课的时候用iPad做的...没有调试..一次AC机.就是简单的递推... 代码: #include "stdio.h"#include "math.h" ...
- IOS使用Asyncsocket进行socket编程
iphone的标准推荐CFNetwork C库编程.但是编程比较烦躁.在其它OS往往用类来封装的对Socket函数的处理.比如MFC的CAsysncSocket.在iphone也有类似于开源项目.co ...
- 用python做些有意思的事——分析QQ聊天记录——私人订制
之前,写了这篇文章,用python提取全部群成员的发言时间,并简单做了下分析.先补充一下,针对特定单个群成员(这里以 小小白 为例)消息记录的获取. 代码比较简单,主要是正则表达式的书写.(附: ...
- "无意义"的div和span标签
HTML <div> 元素是块级元素,它是可用于组合其他 HTML 元素的容器.<div>元素没有特定的含义.除此之外,由于它属于块级元素,浏览器会在其前后显示折行.如果与 C ...
- ASP.NET之Ajax系列(二)
在上一次的Ajax操作中,我们使用了ASP.NET原生控件实现,但是弊端很多,效率低下,而且有个文件上传的BUG:http://blog.csdn.net/zhaoqiliang527/article ...
- swift 闭包+嵌套函数+extension+单例+嵌套函数+??
//: Playground - noun: a place where people can play import UIKit //*******************嵌套函数********* ...
- # 20145210 《Java程序设计》第03周学习总结
教材学习内容总结 第四章 类与对象 在定义类这个小结里,有很多新的术语,书上的比喻很形象,对于理解这部分的内容有很大帮助,现总结如下: •类与对象的关系:要产生对象必须先定义类,类是对象的设计图,对象 ...
- System.out.println调试输出
Android开发中在代码中通过System.out.println调试输出在Logcat窗口中可以看到. 但Logcat视图中夹杂了太多的其它App及底层的信息,看起来并不明朗.可以在Logcat视 ...