2.GCC相关概念

1     GCC相关概念

gcc编译器通常是由多达六七个稍小的程序所组成,这些程序是由一个叫编译器驱动程序来调用。从宏观角度讲编译器有以下几个可分离出来的单独程序,包括:预处理器(preprocessor)、编译器(compiler,又分为两个部分:前端,进行语法和语义解析,生成一抽象语法树;后端,进行代码生成和相关的代码优化)、汇编器(assembler)、链接器(linker)

1.选项 -E : 预编译过程,处理宏定义和include,并作语法检查

gcc -E hello.c -o hello.i  #将hello.c预处理输出为hello.i文件

2.选项 -S : 编译过程,生成通用的汇编代码

gcc -S hello.c  #生成汇编代码hello.s

3.选项 -c : 汇编过程,生成ELF格式的可重定位目标文件,目标文件(机器代码,),用文本编辑器打开是乱码

gcc -c hello.c  #生成目标代码hello.o(中间文件),不能执行,在Makefile中应用广泛

4.选项 -L : 链接过程,将.o文件与所需库文件链接合并成ELF格式的可执行目标文件,分静态链接和动态链接

gcc hello.o -L dir(如./lib)            #指定库搜索路径,有多个则从前往后搜索

5.选项 -l : 链接过程,指定链接库,库命名规则是libxxx.a,指定库名时使用的格式是-lxxx

gcc hello.c -o hello -lm              #链接数学库

ld -o hello hello.o -lxxx             #链接xxx库

6.选项 -o : 将源文件预处理、编译、汇编并链接形成可执行目标文件,-o选项指定可执行文件的文件名,加载到内存中即可执行

gcc hello.c -o hello                  #生成可执行文件hello

7.部分选项:

选项 -Wall : 编译时打开警告信息开关
选项 -D : 在文件中定义宏INFO,编译时加上-D INFO使其生效
选项 -O : 后指定数字,使用编译优化级别1~3优化程序
选项 -g : 产生调试信息

8.选项 -static : 使用静态链接库,将使用的静态库对象嵌入至可执行映像文件中,加载时无需进一步的链接

gcc -c -Wall x1.c x2.c       #生成目标文件

ar -crulibxxx.a x1.o x2.o   #创建静态库

#定义静态库的应用接口xxx.h,里面显式引用上面的源文件函数和对象

gcc -O2 -c main.c            #测试用例调用静态库的函数

gcc -static -o p main.o ./libxxx.a  #链接静态库和目标文件生成可执行文件p

9.选项 -share : 使用共享库,在运行时动态加载目标程序所需要的信息
选项 -fPIC : 指示编译器生成与地址无关的目标文件(position-independentcode)

gcc -shared -fPIC -o libxxx.so x1.cx2.c  #生成共享库libvector.so

gcc -o p1 main.c ./libvector.so           #共享库中的目标对象并未嵌入可执行文件中,执行时完成链接过程

最后由链接器ld合并到的可执行文件hello就可被加载到内存中,由系统执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值