gcc学习

sdjasj

过程

C 或者 C++ 程序从源代码生成可执行程序的过程,需经历 4 个过程,分别是预处理、编译、汇编和链接

参数

gcc -E

1
-E(大写)	预处理指定的源文件,不进行编译。
  • gcc -E 指令只会将预处理操作的结果输出到屏幕上,并不会自动保存到某个文件。因此该指令往往会和 -o 选项连用,将结果导入到指令的文件中

gcc -S

1
-S(大写)	编译指定的源文件,但是不进行汇编。
  • gcc 指令添加 -S(注意是大写)选项,即可令 GCC 编译器仅将指定文件加工至编译阶段,并生成对应的汇编代码文件

  • 经过执行 gcc -S 指令,其生成了一个名为 demo.s 的文件,这就是经过编译的汇编代码文件。也就是说默认情况下,编译操作会自行新建一个文件名和指定文件相同、后缀名为 .s 的文件,并将编译的结果保存在该文件中。

  • 如果需要的话,我们还可以为 gcc -S 指令添加 -o 选项,令 GCC 编译器将编译结果保存在我们指定的文件中

  • gcc -S 指令可以操作预处理后的 .i 文件,也可以操作源代码文件

    • gcc -S demo.i -o test.i
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11

      ​ 如果操作对象为 .i 文件,则 GCC 编译器只需编译此文件;

      ​ 如果操作对象为 .c 或者 .cpp 源代码文件,则 GCC 编译器会对其进行预处理和编译这 2 步操作。





      #### gcc -c

-c 编译、汇编指定的源文件,但是不进行链接。

1
2
3
4
5
6
7

需要强调的一点是,和 gcc -S 类似,gcc -c 选项并非只能用于加工 .s 文件。事实上,-c 选项只是令 GCC 编译器将指定文件加工至汇编阶段,但不执行链接操作。这也就意味着:

- 如果指定文件为源程序文件(例如 demo.c),则 gcc -c 指令会对 demo.c 文件执行预处理、编译以及汇编这 3 步操作;
- 如果指定文件为刚刚经过预处理后的文件(例如 demo.i),则 gcc -c 指令对 demo.i 文件执行编译和汇编这 2 步操作;
- 如果指定文件为刚刚经过编译后的文件(例如 demo.s),则 gcc -c 指令只对 demo.s 文件执行汇编这 1 步操作

gcc a.c #进行上述三个操作并连接,生成可执行文件a.out
gcc a.c b.c c.c -o test.out#一起编译连接三个文件,生成一个可执行文件

1
2
3
4
5
6
7





#### gcc -o

-o 指定生成文件的文件名。
##example
gcc -E demo.c -o demo.i




#### gcc -I 

指定头文件位置,相对路径和绝对路径都可以
  • 標題: gcc学习
  • 作者: sdjasj
  • 撰寫于: 2022-03-05 10:14:40
  • 更新于: 2022-03-14 17:51:31
  • 連結: https://redefine.ohevan.com/2022/03/05/gcc学习/
  • 版權宣告: 本作品采用 CC BY-NC-SA 4.0 进行许可。
 留言
此頁目錄
gcc学习