Linux中常见gcc命令的使用

本文详细介绍了gcc命令的使用,包括编译单个和多个源文件、生成可执行文件、仅编译不链接以及创建静态库的过程。通过实例演示了如何在实际项目中应用这些技巧,帮助读者理解gcc命令在IT开发中的作用。

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

前言

本篇博客介绍常用gcc命令的使用,欢迎小伙伴们一起学习进步!

1.编译单个源文件并生成可执行文件
gcc hello.c -o hello

示例如下:
这里我已经写好了一个hello.c文件,内容是输出hello world!在屏幕上(使用ls命令可以才看当前目录下的文件)

在这里插入图片描述
hello.c文件内容如下:

#include<stdio.h>

int main()
{
   printf("hello world!\n");
   return 0;
}

使用上述gcc命令编译该文件,生成可执行文件hello,当然也可以命名为其他文件名
在这里插入图片描述
可以看到使用./+可执行文件名,已成功运行该文件

2.编译多个源文件并生成可执行文件
gcc hello.c add.c -o output

此时我在hello.c文件中调用add文件中的函数,想要正常运行,编译就需要将两个文件一起编译成一个可执行文件了
新的hello.c文件内容如下:

#include<stdio.h>
#include"add.h"
int main()
{
   int a = 1;
   int b = 2;
   int c;
   c = add(a,b);
   printf("a + b = %d\n",c);
   printf("hello world!\n");
   return 0;
}

add.h头文件中放函数声明,add.c文件内容如下:

#include<stdio.h>
#include"add.h"
int add(int a,int b)
{
    return a + b;
}

现在我们使用上述gcc命令将两个文件编译成一个可执行文件,命名为output,如下:
在这里插入图片描述
运行output后可以看到在屏幕上已经打印出我们期望的结果

3.仅编译但不链接
gcc -c add.c

准确的说,整个编译是分为四个阶段,分别是预编译、编译、汇编、链接,想要进一步了解的小伙伴可以自行了解一下,上述gcc命令只执行前三步,生成一个.o文件
在这里插入图片描述
可以看到此处已经生成了add.o文件,此文件可后续用于制作静态库

4.生成静态库文件
gcc -c add.c
ar rcs libadd.a add.o

第一步是为了生成add.o文件,我们已经有了,现在直接执行第二步,生成我们想要的静态库libadd.a,这里需要注意一下库文件的命名规范,使用lib+库名+.a,库名可以任意设置,.a代表静态库文件。ar -rcs 命令的作用是库文件不存在就创建,若存在就进行更新。
在这里插入图片描述
可以看到我们想要的静态库文件已经生成,这里在说说为什么会需要库文件,举个例子,假如公司A作为供应商向客户公司B提供一个功能,公司A会将写好的代码文件制作成库文件,再将头文件一起给客户公司B,头文件中包含各种函数声明,客户公司B链接该静态库调用头文件中暴露出来的接口函数就可以使用该功能了,这样客户公司B也不会知道内部代码是如何实现的,保护了公司A的利益,同时也满足了客户公司B的需求。
接下来,我们看看应该如何使用libadd.a文件,公司A提供的文件有:libadd.a和add.h,公司B有自己的文件:hello.c
我们先将其他文件全部删除,只保留这几个文件,同时创建一个目录lib用来存放库文件,目录include用来存放头文件
在这里插入图片描述
现在include中存放头文件,目前存放的是公司A提供的add.h,lib中存放的是公司A提供的静态库libadd.a,接下来,我们使用gcc命令将hello.c编译链接该静态库并生成一个可执行文件hello
在这里插入图片描述
前面已经介绍过gcc hello.c -o hello的使用,现在解释一下 -I 、-L、-l的含义:

-I 指明hello.c中引入的头文件所在目录
-L 指明使用的库文件所在目录
-l 指明使用的库文件名称

最后执行生成的可执行文件,可看到与我们的预期结果一致。

结尾

本博客主要介绍常用gcc命令的使用,希望大家看完这篇博文能学到一些知识,最后送大家一句:天下不负有心人,滴水石可穿!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值