gcc编译步骤与常用参数

gcc编译步骤与常用参数

image

编译步骤

  • 源码hello.c只有寥寥几行代码
#include <stdio.h>

int main(void)
{
    printf("hello\n");
}
  • 执行-E预处理,得到hello.i,生成了很长的.i文件

image

  • -S编译helloc.s,这一步是最重要的,得到的二进制,可以看出很多问题:

可以使用objdump -dS ELF查看反汇编(重定向到文件中查看方便)

image

  • -c汇编得到hello.o,知识将汇编指令翻译成机器指令,人看不懂

image

  • 最后一步链接得到ELF文件,
    1.数据段合并
    image

    2.地址回填
    image

常用指令选项

  1. -v 查看gcc版本号

  2. -I 指定头文件目录,注意ID和目录之间没有空格

image

hello.c依赖目录inc下的hello.h,使用gcc hello.c -o hello会报错:

image

​ 需要-I 指定头文件目录gcc hello.c -o hello -I./inc

补充说明——头文件守卫:比如这个hello.h被某源文件一直#include "hello.h"、#include "hello.h"... ...,利用头文件守卫可以保证源文件只include一次该头文件的内容,避免重复包含

image

  1. -c 只编译,生成.o文件,不进行链接

  2. -g 包含调试信息,配合gdb使用,见gdb常用使用总结

  3. -0n n=0~3 编译优化,n越大优化得越多

  4. -Wall 提示更多警告信息,-w取消所有警告

  5. -D 编译时定义宏,注意-D和之间没有空格,一般用于调试信息的开关

  6. -E 生成预处理文件

  7. -shared 制作动态库

  8. -fPIC 生成位置无关的代码

posted @ 2024-03-24 14:07  胖白白  阅读(11)  评论(0编辑  收藏  举报