gcc编译器

来源:互联网 发布:手机社交软件排行 编辑:程序博客网 时间:2024/05/22 10:43

一:什么是gcc编译器?

gcc(GUN Compiler Collection)是LINUX下最常用的c语言编译器,它是CUN项目中符合ANSI C标准的编译系统,能够编译用C,C++和Object C等语言编写的程序。GCC不仅功能非常强大,结构也异常灵活。最值得称道的一点就是它可以通过不同的前端模块来支持各种语言,如Java,Fortran,Pascal,Modula-3和Ada等。开放,自由和灵活是LINUX的魅力所在,而这一点在GCC上的体现就是程序员通过它能够更好地控制整个编译过程。

二:gcc是交叉编译器,即在一个平台编译可在另一个平台运行,要实现交叉编译,先要装交叉编译器。


三:gcc的编译过程是什么?

 1.预处理(-E)生成 .i文件

  1)头文件展开2)宏替换3)条件编译


  (2)编译(-S)生成 .s文件

   把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件

  

   (3)汇编(-c)生成 .o文件,即目标文件

  将汇编代码转变成机器可以执行的命令

   

  (4)链接(-O

  链接器ld将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件

  编译器优化 -O1-O2-O3


四:GCC的三级优化分别做了什么?五:

-O1:编译会尝试减少代码体积和代码运行时间。但是并不执行会花费大量时间的优化操作

 

-O2:进一步优化.GCC执行几乎所有支持的操作但不包括空间和速度之间权衡的优化。-O2优化等级下,并不执行循环展开和函数“内联”优化操作。与-O1比较该优化-O2将会花费更多的编译时间当然也会生成性能更好的代码


-O3:更进一步优化。-O3打开-O2指定的所有优化操作并且打开:-finline-functions-funswitch-loops-fgcse-after-reload


-Os:针对程序空间大小优化(多用于嵌入式系统)。-Os使能-O2中除去会增加程序空间的所有优化参数。同时-Os还会执行更加优化程序空间的选项


五:gcc除了编译还可以做什么?
gcc 还可以用来制作静态库和动态库!

六:什么是静态库,什么是动态库?

静态库:是在执行程序之前就已经加入到执行代码中,成为执行程序的一部分来执行的,后缀名:.a

动态库:是在执行程序启动时加载到执行代码中,后缀名:.so


七:静态库与动态库的区别?

1,两者的执行时间不同:静态库:是在执行程序之前,动态库:是在执行程序启动时。

2,执行速度方面:静态库比动态库快,因为静态库在执行程序之前就已经加入到执行代码中,而动态库是在执行程序启动时才加载到执行代码中的。

3编译速度方面:动态库执行速度快。

4,静态库生成的代码,可执行文件较大,动态库相对较小。

5,静态库不易升级,而动态库易升级。

6在代码部署方面:动态库不易部署,而静态库易部署。

 

八:该怎样选择静态库与动态库?

1,在升级角度:若需要频繁升级,则选择动态库,反之,选静态库。

2,在代码的部署方面:若对代码部署有细致要求,则选择静态库,反之,选动态库。

3,在代码大小方面:若要求体积较小,则选择动态库,反之,选静态库。


九:静态库的创建与使用

创建:1.gcc -c 源文件.c       将.c文件变成.o 文件

      2.ar rcs 静态库名 目标文件1   目标文件2                 

      注意事项:1 rc :静态库不存在,就创建该库文件 

                2 s:更新库文件

                3  例如:libadd.a   lib是前缀,.a是后缀

                4   目标文件是.o文件

使用:  gcc main.c -ladd -L.     说明:  -l表示链接   -L. 指定库的路径,  .表示当前路径   add是库名


十:动态库的创建与使用

创建:gcc -shared -fPIC -o 库名.so 源文件.c

     例如:gcc -shared -fPIC -o libcal.so add.c sub.c


使用:gcc 源文件.c ./库名.so -o可执行文件名

     例如:  gcc main.c ./libcal.so -o main


0 0
原创粉丝点击