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

news2024/11/17 1:31:12

一、准备工作

简单介绍,马上出 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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/375957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯TIM实现即时通信 v3+ts实践

目录 初始化sdk 功能描述 初始化 准备 SDKAppID 调用初始化接口 监听事件 发送消息 创建消息 创建文本消息 登录登出 功能描述 登录 登出 销毁 登录设置 获取会话列表 功能描述 获取会话列表 获取全量的会话列表 历史消息 功能描述 拉取消息列表 分页拉取…

自动驾驶自主避障概况

文章目录前言1. 自主避障在自动驾驶系统架构中的位置2. 自主避障算法分类2.1 人工势场法&#xff08;APF&#xff09;2.1.1引力势场的构建2.1.2斥力势场的构建2.1.3人工势场法的改进2.2 TEB&#xff08;Timed-Eastic-Band, 定时弹性带&#xff09;2.3 栅格法2.4 向量场直方图(V…

Linux 之 大数据定制篇-shell 编程

文章目录1 为什么要学习 Shell 编程2 Shell 是什么&#xff1f;3 Shell 脚本的执行方式3.1 脚本格式要求3.2 编写第一个 Shell 脚本3.3 脚本的常用执行方式4 Shell 的变量4.1 Shell 变量介绍4.2 shell 变量的定义4.3 shell 变量的定义5 设置环境变量5.1 基本语法5.2 快速入门6 …

【AI绘画】秒级出图 快速生成大师级画作

最近闲来无事&#xff0c;在网上体验了一下各种AI绘画工具。 根据输入的描述语快速生成自己想要的图片&#xff0c;听着还是很不错的&#xff01;想要啥图片就可以生成啥图片&#xff1f;于是&#xff0c;期待满满的搞起来了~ 可是真当体验了一下之后… 这生成的啥呢&#xf…

广泛运用在工业、轨道交通、监狱的ip对讲终端

ip网络对讲系统是不同于传统广播、调频寻址广播和数控广播的产品&#xff0c;它是基于IP数据网络&#xff0c;将音频信号经过数字编码以数据包形式按TCP\IP协议在局域网或广域网上传送&#xff0c;再由终端解码的纯数字化单向&#xff0c;双向及多向音频扩声系统。 本产品是新一…

多表left join 慢sql问题

作为个人记录&#xff0c;后续再填坑a对p是1对多 ,p对llup 1对多SELECTa.id,p.id,t1.id FROMliv_series_product aINNER JOIN liv_product p ON p.id a.product_idLEFT JOIN ( SELECT llup.id, llup.product_id, llup.room_id FROM liv_live_user_product llup WHERE llup.ro…

超声功率放大器原理(超声功率放大器的作用是什么)

超声功率放大器是电子实验室中比较常见的测量仪器&#xff0c;虽然很多工程师频繁使用&#xff0c;但是对于超声功率放大器的了解却不够。下面就让安泰电子来为大家科普超声功率放大器原理和作用的内容。超声功率放大器是什么&#xff1a;超声功率放大器是一种用于提高超声波能…

requests---(2)session简介与自动写博客

目录&#xff1a;导读 session简介 session登录 自动写博客 获取登录cookies 抓取写博客接口 requests自动写博客 写在最后 http协议是无状态的&#xff0c;也就是每个请求都是独立的。那么登录后的一系列动作&#xff0c;都需要用cookie来验证身份是否是登录状态&#…

C++将派生类赋值给基类(向上转型)

1.将派生类对象赋值给基类对象 #include <iostream> using namespace std;//基类 class A{ public:A(int a); public:void display(); public:int m_a; }; A::A(int a): m_a(a){ } void A::display(){cout<<"Class A: m_a"<<m_a<<endl; }//…

一文解读电压放大器(电压放大器原理)

关于电压放大器的科普知识&#xff0c;之前讲过很多&#xff0c;今天为大家汇总一篇文章来详细的讲解电压放大器&#xff0c;希望大家对于电压放大器能有更清晰的认识。电压放大器是什么&#xff1a;电压放大器是一种常用的电子器件&#xff0c;它的主要作用是把输入信号的振幅…

计算机网络-- 分类、体系结构(day03)

计算机网络的分类 计算机网络的性能指标 速率 数据块&#xff08;文件&#xff09;的大小单位是以2^10(1024)为一个级别递增。 例如&#xff1a; 1MB大小的文件&#xff0c;在网速为1Mbps发送的时间需要多少 文件大小的M是2进制来表示的&#xff0c;网速的M为10进制来表示的 …

zabbix4.0-自定义脚本钉钉告警

目录 1、自定义一个钉钉群组 2、自定义脚本告警 3、创建媒体类型 4、为用户指定媒介类型 5、更改触发器表达式进行测试 1、自定义一个钉钉群组 群组里面添加一个自定义机器人 会有一个webhook地址&#xff0c;这个地址要记住 安全设置暂时选择自定义关键词&#xff0c;定义…

第四阶段02-酷鲨商城项目Mybatis相关的配置

14. 添加与Mybatis相关的配置 在每个项目中&#xff0c;当需要使用Mybatis实现数据库编程时&#xff0c;都需要添加2项一次性配置&#xff1a;配置Mapper接口所在的包&#xff08;package&#xff09;、配置XML文件在哪里。 关于配置Mapper接口所在的包&#xff0c;可以&…

BPMN2.0是什么,BPMN能解决企业流程管理中哪些问题?

一、前言&#xff1a; 在任何行业和企业中&#xff0c;一定存在着各式各样的流程&#xff0c;请假流程、报销流程、入职流程、离职流程、出差流程、合同审批流程、出入库流程等等…… 无论是管理者、技术人员还是业务人员&#xff0c;每天肯定也在使用各种流程&#xff0c;但…

《MySQL学习》 索引失效的三种特殊情况

一.条件字段使用函数 explain select * from bpm_proc_instance bpi where CREATED_AT > 2022-06-01 CREATED_AT 字段建立了索引&#xff0c;此时explain分析的结果表明能使用到索引 但如果我们对 CREATED_AT 字段使用函数 explain select * from bpm_proc_instance bpi w…

【强烈建议收藏:计算机网络面试专题:URL地址栏中输入网址到页面展示的全过程DNS域名解析的过程】

一.面试官:我们就来问一下关于计算机网络相关的专业知识吧 面试官:好的&#xff0c;那我们yyyy-mm-dd就在腾讯会议上面试吧; 卑微的你:好的。 卑微的你:到了面试的时间了&#xff0c;守时的你一定早早的进入了视频会议&#xff0c;等待着面试官&#xff0c;心里慌的一批&#…

Elasticsearch7.8.0版本进阶——文档处理

目录一、文档冲突1.1、文档冲突的概述1.2、在数据库领域中如何确保并发更新时变更不会丢失1.2.1、悲观并发控制1.2.2、乐观并发控制二、乐观并发控制2.1、Elasticsearch 的概述2.2、Elasticsearch 如何确保文档的旧版本不会覆盖新的版本2.3、Elasticsearch 如何解决相互冲突的变…

洛谷P5738 【深基7.例4】歌唱比赛 C语言/C++

【深基7.例4】歌唱比赛 题目描述 n(n≤100)n(n\le 100)n(n≤100) 名同学参加歌唱比赛&#xff0c;并接受 m(m≤20)m(m\le 20)m(m≤20) 名评委的评分&#xff0c;评分范围是 000 到 101010 分。这名同学的得分就是这些评委给分中去掉一个最高分&#xff0c;去掉一个最低分&…

拍摄的风景视频中,如何快速有效地去除视频中的杂物?

我们在外游玩拍摄的短视频&#xff0c;视频中出现的不必要杂物&#xff0c;比如垃圾、广告或其他不相关的人&#xff0c;会影响视频内容的传达&#xff0c;会降低视频的观感质量。因此&#xff0c;需要去除这些杂物&#xff0c;使得视频更加干净、整洁。让观众更容易理解视频的…

性能分析工具的使用

在数据库调优中&#xff0c;我们的目标就是响应时间更快&#xff0c;吞吐量更大。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。 1.数据库服务器优化步骤 数据库调优流程图 整个流程划分成了**观察(Show status&#xff09;和行动&#xff08;Ac…