一、准备工作
简单介绍,马上出 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;
}