GCC编译过程及常用命令

GCC编译过程

GCC编译过程及常用命令

GCC编译过程及常用命令

编写如下程序hello.c作为示例
GCC编译过程及常用命令

预处理--ccl(编译器)

  • 将#开头的预处理语句转换后重新插入
  • 删除所有注释
  • 得到hello.i
    GCC编译过程及常用命令

编译--ccl(编译器)

词法分析、语法分析等等内容,生成汇编代码hello.s,默认AT&T格式,添加选项-masm=intel可以生成intel格式,-fno-asynchronous-unwind-tables生成无cfi宏的汇编指令更加易读。

下面的printf只有一个参数,被优化为puts了
GCC编译过程及常用命令

汇编--as(汇编器)

翻译为机器指令hello.o文件

-c选项可以直接从hello.s或者hello.c生成hello.o

GCC编译过程及常用命令

链接--collect2(链接器)

默认动态链接,选项-static指定静态链接

这部分内容负责空间分配、符号绑定、重定位等

生成ELF文件,部分如下

未命名图片

参数

gcc -x lang file

设定文件所使用的语言,默认为c语言。

这样做会使gcc忽略文件扩展名,将.c改为.abc也无所谓。

可用的参数有:c, objective-c, c-header, c++, cpp-output, assembler, 与 assembler-with-cpp

例:

gcc -x c hello.abc

gcc -x none file

不主动设定文件使用的语言,要求其根据扩展名确定语言。

例:

gcc -x none hello.c

这里根据扩展名.c会确定为C文件。

gcc -c file

只执行前三步,即预处理、编译、汇编,输出一个obj文件。

gcc -c hello.c

生成的文件为hello.o

gcc -S file

只执行前两步,即预处理和编译,生成汇编文件。

gcc -S hello.c

生成的文件名为hello.s

gcc -E file

只执行第一步:预处理,不生成文件,但是可以进行重定向到一个输出文件。

gcc -E hello.c > hello.txt

gcc -o file

指定一个输出目标。

gcc -c hello.c -o hello.o 

gcc -pipe

使用pipe作为编译中的临时文件。

gcc -pipe -c hello.c -o hello.o 

gcc -incllude file

包含某个文件,作用类似于#include

gcc -C

预处理后不删除注释信息。

gcc -static

使用静态链接(默认为动态)

gcc -share

尽量使用动态库

原文链接: https://www.cnblogs.com/muling1m/p/17107146.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    GCC编译过程及常用命令

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/316997

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 下午2:27
下一篇 2023年2月16日 下午2:31

相关推荐