Linux学习——01 gcc编译器

一、程序构建过程

高级语言的代码无法被计算机执行,需要将高级语言代码编译成汇编语言,然后再将汇编语言翻译成机器指令,最后通过链接生成最后的可执行文件,此时该文件才可以被计算机执行。总共有四步:

1.1 预编译(预处理)

主要用于生成头文件的扩展以及宏替换等。生成 .i 文件
例如:

gcc -E hello.c -o hello.i

1.2 编译

主要将高级语言代码翻译成汇编语言,得到汇编文件。生成 .s 文件
例如:

gcc -S hello.i -o hello.s

1.3 汇编

主要将汇编语言翻译成机器指令,得到目标文件。生成 .o 文件
例如:

gcc -c hello.s

1.4 链接

主要将目标文件和库文件进行链接,生成可执行文件
例如:

gcc hello.o //生成 a.out 这一可执行文件
gcc hello.o -o hello //生成 hello 这一可执行文件

小案例:

Linux学习——01 gcc编译器_第1张图片
Linux学习——01 gcc编译器_第2张图片

二、文件名后缀

2.1 可读文本

  • . h —— C语言源代码头文件
  • . c —— 预处理前的C语言源代码文件
  • . s —— 汇编语言文件

2.2 不可读的二进制

  • . o —— 目标文件
  • . a —— 静态库文件
  • . so —— 共享(动态)库文件
  • . out —— 可执行文件

三、gcc编译选项

格式:gcc [选项] [参数] 文件1 文件2 ...

3.1 要求掌握的选项

  • gcc -E 预编译
    缺省输出到屏幕,使用-o选项来制定输出文件(.i文件)

  • gcc -S 编译
    将高级语言文件翻译成汇编语言文件(.s文件)

  • gcc -c 汇编
    将汇编语言文件汇编成机器语言文件(.o文件)

  • gcc -o 指定输出文件名

  • gcc xxx.c 编译+链接,默认生成a.out

3.2 要求熟悉的选项

  • gcc -std 用于指定C语言的执行标准
    例如:gcc 1.c -std=c99
  • gcc -v 用于察看gcc的版本信息
  • gcc -Wall 用于尽可能显示所有警告信息
  • gcc -Werror 用于将警告当作错误处理

3.3 了解的选项

  • gcc -g 用于生成调试信息,可以进行gdb调试;
    用于检查段错误的原因;
    gdb a.out->run->bt 回车,退出用quit

  • gcc -x 显示指定源代码的编程语言
    xxx.c - C语言
    xxx.cpp - C++语言
    xxx.for - Fortran语言
    xxx.java - Java语言

  • gcc -O (大写的o)用于进行优化处理

3.4 扩展的选项

  • man gcc/cc 查询有关gcc的详细信息

你可能感兴趣的:(Linux,linux,学习,运维)