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 @   胖白白  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示