gcc/g++执行的步骤及参数简介

  • Post author:
  • Post category:其他





(本文为自己参考网上的资料整理所得,如果有所纰漏或者错误,请留言指明!谢谢!)


gcc可以用来编译链接.c源程序,gcc同样可以编译.cpp文件,但是不能链接.cpp文件生成可执行文件。只有g++可以编译并且链接.cpp,g++在编译.cpp文件的时候自动调用gcc进行源文件的编译。




下面来看看gcc/g++常用的参数。





一、gcc/g++常用的参数


-IDir




指定额外的头文件搜索目录,编译器首先在Dir中寻找,然后按照常规的顺序搜索头文件。


-include file




相当于在源程序中添加头文件,相当于#include “file”。


-LDir




指定编译的时候编译器搜索的库路径。


-lLIBRARY




指定编译的时候使用的库。


-E




只激活预处理功能。


-S




只激活预编译和编译功能。


-c




只激活预处理、编译和汇编功能。


-shared




生成共享目标文件,通常用于建立共享库时使用。


-static




禁止使用共享库。


-w




不生成任何警告信息。


-Wall




生成所有警告信息。


-C




在预处理的时候不删除注释信息,一般和-E联合使用,用于分析程序。


-M




生成文件的关联信息,包含目标文件生成所依赖的所有源代码。


-MM




和上面的一样,但是忽略头文件造成的依赖关系。


-MD、-MMD




对应和-M、-MM相同,只不过将输出输入到.d文件中去。





二、gcc/g++执行的四个步骤




g++命令在最后生成可执行文件之前经历了四个步骤,分别是预处理、编译、汇编和链接。我们通过使用g++的命令选项来查看g++命令执行过程中的步骤和每一步的生成文件。



(1)预处理器(预处理器cpp)


g++ -E main.cpp > main.i


上面的命令只激活预处理,该过程并不生成文件,我们采用输出重定向到main.i文件中。预处理主要是语法的检查、宏替换、注释的消除和找到相应的库文件。



(2)将预处理后的文件转换成汇编语言程序(编译器egcs)


g++ -S main.i


上面的命令执行完成后生成main.s文件,这是一个汇编语言源程序。



(3)将汇编语言源程序转换成为目标文件二进制机器码(汇编器as)


g++ -c main.i


该命令执行之后生成main.o目标文件,这就是二进制机器码。



(4)链接目标文件生成可执行程序(链接器ld)


g++ main.o


该命令执行之后便默认生成一个a.out的可执行文件,该过程是将main.o和所需的其他库文件链接生成可执行文件。


上面的四个步骤就是g++将源代码生成可执行文件经历的四个步骤。



版权声明:本文为geniusluzh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。