GCC编译器

摘要:
gcc-otesttest3a.otest3b.otest3.o-lm4.使用管道?gcc-pipe--Wall-O3-电位测试。CGcc编译过程C预处理Gcc汇编文件处理创建静态库GUN链接帮助:库显示/*************************************************************此程序设计的性能非常低。

详见《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
;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编译器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇TCP/IP协议分层模型(转载)旋转的太极图下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

2.1.1优化程序性能

性能优化有三个层次: 系统层次 算法层次 代码层次 系统层次关注系统的控制流程和数据流程,优化主要考虑如何减少消息传递的个数;如何使系统的负载更加均衡;如何充分利用硬件的性能和设施;如何减少系统额外开销(比如上下文切换等)。 算法层次关注算法的选择(用更高效的算法替换现有算法,而不改变其接口);现有算法的优化(时间和空间的优化);并发和锁的优化(增加任务的...

每一个C#开发者必须知道的13件事情

1.开发流程 程序的Bug与瑕疵往往出现于开发流程当中。只要对工具善加利用,就有助于在你发布程序之前便将问题发现,或避开这些问题。 标准化代码书写 标准化代码书写可以使代码更加易于维护,尤其是在代码由多个开发者或团队进行开发与维护时,这一优点更加突出。常见的强制代码规范化的工具有:FxCop、StyleCop和ReSharper。 开发者语:在掩盖错误之...

Linux C语言头文件搜索路径

本文介绍在linux中头文件的搜索路径,也就是说你通过include指定的头文件,linux下的gcc编译器它是怎么找到它的呢。在此之前,先了解一个基本概念。     头文件是一种文本文件,使用文本编辑器将代码编写好之后,以扩展名.h保存就行了。头文件中一般放一些重复使用的代码,例如函数声明、变量声明、常数定义、宏的定义等等。当使用#include语句将...

go 优化技巧

go语言最全优化技巧总结,值得收藏! https://mp.weixin.qq.com/s/_VGaV8ef65h9goxxfWejtQ 赵柯 云加社区 2021-08-23   导语 | 本文总结了在维护go基础库过程中,用到或者见到的一些性能优化技巧,现将一些理解梳理撰写成文,和大家探讨。     一、常规手段   (一)sync.Pool  ...

在perl上装DBD:mysql 的问题

在perl上装DBD:mysql ,就这事弄了多半天。mysql实在是不咋地 首先,在装DBD:mysql模块时,make后打印出错误信息,如下:gcc: language strconst not recognized gcc: dbdimp.c: linker input file unused because linking not done gcc...

Code Tips: gcc对结构体的默认字节“对齐”方式

1. 发现问题     最近在编写代码过程中发现,对一个结构体进行 sizeof 操作时,有时候大小是填充过的,有时候又没有填充。     那么,如果在代码中没有显示的指定要求编译器进行对齐时,gcc的默认处理是怎样的呢? 2. 先说结论     代码中如果没有显示指定字节对齐时,gcc默认并没有进行cpu宽度字节对齐;     gcc会将结构体的大小填...