【Linux Posix】(03)编译器gcc的使用

本文详细介绍了GCC的使用格式,包括预处理、编译、汇编和链接四个阶段,并通过实例展示了每个阶段的操作。同时,讲解了-Idir、-l和-DM选项的用途,以及如何使用它们来指定头文件路径、链接库和定义宏。此外,还提及了优化和调试选项的使用,为C程序的开发提供了全面的指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. gcc的使用格式

2.1 预处理:

2.2 编译:

2.3 汇编:

2.4 链接:

3. 后缀名 所对应的语言

3.1 -I dir

3.2 -l 

3.3 -DM

4. 使用优化选项

5.使用调试选项


1. gcc的使用格式

例如:

gcc hello.c -o hello 或 gcc hello.c

2. 程序编译过程

例如:compile.c 源文件

//compile.c

#include <stdio.h>
#define M 10

int main(void)
{
    printf("hello, M is %d\n", M);
    return 0;
}

2.1 预处理:

头文件包含内容的处理、条件编译的处理、宏替换的处理

(-E 预处理,输入是C源码,输出是经过预处理的C源码)

gcc -E compile.c -o compile.cpp

2.2 编译:

(-S 编译,输入是经过预处理的C源码,是输出是 .s 汇编源码)

gcc -S compile.c -o compile.s

2.3 汇编:

(-c 汇编,输入是汇编源码,输出是 .o 二进制代码--不可执行的,不含有库函数的)

gcc -c compile.c -o compile.o

2.4 链接:

(-o 链接,输入是不可执行二进制代码及用到的库函数库文件,输出是最终的可执行二进制代码)

gcc compile.o -o compile

3. 后缀名 所对应的语言

3.1 -I dir

gcc 编译默认在 /usr/include 和 ./ 当前目录路径下寻找库函数的头文件,如果没有需要使用 -I dir 指定头文件路径

//compile.c

#include <stdio.h>
#include "myfun.h"
#define M 10

int main(void)
{
    int i=3,j;
    j = myfun(i);
    printf("j = %d\n", j);
    printf("hello, M is %d\n", M);
    return 0;
}
gcc compile.c myfun.c -o compile -I./include

3.2 -l 

-l(小写L)指定需要使用的库文件,后面直接跟库的名称

//compile.c

#include <stdio.h>
#include <math.h>
#include "myfun.h"
#define M 10

int main(void)
{
    int i=3,j;
    float f;
    j = myfun(i);
    printf("j = %d\n", j);
    f = cos(i);
    printf("f = %f\n", f);
    printf("hello, M is %d\n", M);
    return 0;
}
gcc compile.c myfun.c -o compile -I./include -lm

(注:-lm 的m是库名称,/usr/lib/libm.so是库文件名称,包含了数学库math.h中的库函数cos)

(定义和关系:m是库名称,libm.so是库文件名称,库文件名称切(头)前缀lib和断(尾)后缀.so就是库名称)

3.3 -DM

-DM 例如 -D M=100 相当于在程序中添加#define M 100(用于调试)

//compile.c

#include <stdio.h>
//#define M 10

int main(void)
{
    printf("hello, M is %d\n", M);
    return 0;
}
gcc compile.c -o compile -D M=100

4. 使用优化选项

5.使用调试选项

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值