【C语言编译器】03 Linux GCC 初探

2023-05-16

一、准备工作

简单介绍,马上出 GCC 系列。本文非常浅显。

Linux系统常用来用作服务器,其中最常用的发行版是CentOS、Ubuntu、Debian等。

尽管很多C语言IDE都有Linux版本,比如VS、CLion的Linux版。但作为服务器的Linux通常没有GUI界面,一些编译、调试、部署的工作就要使用命令行来完成。

当然如果你的服务器带宽足够,你也可以使用远程桌面来使用那些IED,但我想很少有人那么做,主要原因是国内服务器带宽费用不低、且使用远程桌面的方式不如ssh连接来的灵活、便捷。

本文使用ubuntu20.04系统,ssh连接服务器来操作。

使用Finalshell连接服务器,在用户ubuntu目录下新建GCC_Demo文件夹,后面文工程件都放这里。
在这里插入图片描述

进入GCC_Demo文件夹,创建本文的工程文件夹demo_1,并新建一个c源文件:

root@CQUPTLEI:/home/ubuntu# cd GCC_demo
root@CQUPTLEI:/home/ubuntu/GCC_demo# mkdir demo_1
root@CQUPTLEI:/home/ubuntu/GCC_demo# cd demo_1
root@CQUPTLEI:/home/ubuntu/GCC_demo/demo_1# touch main.c

现在来编写源码,Finalshell可以直接对文件进行编辑,这里我在命令行使用vim来编写。
在这里插入图片描述

二、使用GCC编译器

Linux 下使用最广泛的 C/C++ 编译器是 GCC,大多数的 Linux 发行版本都默认安装,不管是开发人员还是初学者,一般都将 GCC 作为 Linux 下首选的编译工具。本教程也毫不犹豫地使用 GCC 来编译C语言程序。

GCC 仅仅是一个编译器,没有界面,必须在命令行模式下使用。通过gcc命令就可以将源文件编译成可执行文件。
在这里插入图片描述

2.1 一步编译

最简单的命令是:

gcc main.c

会生成一个名为a.out的可执行文件,Linux文件不以后缀区分(还可以没有后缀),理论上,他有可执行权限就可以执行。
在这里插入图片描述
运行一下这个程序:

root@CQUPTLEI:/home/ubuntu/GCC_demo/demo_1# ./a.out
Hello CSDN
2023-02-27

./ 表示当前目录,整条命令的意思是运行当前目录下的 a.out 程序。如果不写./,Linux 会到系统路径下查找 a.out,而系统路径下显然不存在这个程序,所以会运行失败。

现在自定义一下生成文件的名称和位置,目标文件夹需要自己新建,gcc不会帮你新建。

root@CQUPTLEI:/home/ubuntu/GCC_demo/demo_1# mkdir output
root@CQUPTLEI:/home/ubuntu/GCC_demo/demo_1# gcc -o output/main main.c

查看一下结果:

root@CQUPTLEI:/home/ubuntu/GCC_demo/demo_1# tree -l
.
├── a.out
├── main.c
└── output
    └── main

1 directory, 3 files

运行(记得带上可执行文件的目录):

root@CQUPTLEI:/home/ubuntu/GCC_demo/demo_1# output/main
Hello CSDN
2023-02-27

如果显示没有执行权限,赋予即可。文件的权限有三组,每组3项。三组分别代表当前用户、当前用户所在用户组其他用户、其他用户组用户,三项代表读、写、执行权限,即rwx。更多可以看我以前的文章:Linux用户及权限管理(三)权限管理。

2.2 分步编译

前面是一次执行了编译和连接的工作。现在分步来操作。

现在再写一个c程序,定义一个比较两数大小的函数,在main.c里面调用。

root@CQUPTLEI:/home/ubuntu/GCC_demo/demo_1# tree -l
.
├── compare.c
├── compare.h
├── main.c
└── output

1 directory, 3 files

(1)编译

gcc -c compare.c main.c

(2)连接

gcc -o output/out compare.o main.o

(3)运行

root@CQUPTLEI:/home/ubuntu/GCC_demo/demo_1# output/out
Hello CSDN
2023-02-27
8

目录结构:

root@CQUPTLEI:/home/ubuntu/GCC_demo/demo_1# tree -l
.
├── compare.c
├── compare.h
├── compare.o
├── main.c
├── main.o
└── output
    └── out

1 directory, 6 files

本文源码:
main.c

#include<stdio.h>
#include"compare.h"
void main()
{
	int a=8,b=5;
	printf("Hello CSDN\n");
	printf("2023-02-27\n");
	printf("%d\n",compare(a,b));
}

compare.h:

#ifndef _COMPARE_H_
#define _COMPARE_H_

int compare(int x,int y);

#endif

compare.c:

#include<stdio.h>
#include"compare.h"

//求两个数中较大的一个
int compare(int x,int y)
{
	return x>y?x:y;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C语言编译器】03 Linux GCC 初探 的相关文章

随机推荐