Linux下实现C语言程序

news2024/10/6 8:34:40

一.情况说明

     写这篇博客的情况比较复杂,首先我本来是参加新星计划按照规划现在去学习shell脚本语言的,但是博主现在由于其他原因需要了解makefile,makefile是Linux系统下的一种工具,makefile的一些背景要涉及链接库的知识,而链接库刚好在之前我简单的介绍过一些,只不过那个时候是在Windows下进行的,现在要学会在Linux下进行操作它,要操作它你就又不得不进行C语言编程,但是如果不了解Linux下的C语言编程,还是有一些麻烦,所以今天在这里从零开始详细介绍Linux中C语言环境的配置,以及C语言程序的运行过程。

      今天这篇的博客和链接库的关系不大,但是这篇是开始,到后面Linux下的链接库以及makefile了解都有一定的作用,这里大家可以去阅读一下。Windows下实现链接库

二.Linux下实现C语言过程

  • 安装C语言编译器

          在Linux系统上,您需要安装C语言编译器才能编译C语言程序。常见的编译器有GCC(GNU Compiler Collection)和Clang。

  • 编写C语言代码

使用任何文本编辑器(例如Vim、Emacs或Nano)创建一个新的源文件,并将其保存为(或其他名称)。

  •  编译源代码

在终端中,使用命令来编译源代码,产生可执行文件

  • 运行可执行文件

三.GCC编译器

1.了解GCC

        GCC是GNU Compiler Collection(GNU编译器集合)的缩写,它是一个由自由软件基金会开发的编译器系统。GCC可以编译多种编程语言,包括C、C++、Objective-C、Fortran、Ada和其他一些语言。GCC被广泛应用于开源软件开发、嵌入式系统和高性能计算等领域。

       GCC不仅是一个编译器,还提供了一组与编译器相关的工具和库,例如调试器、汇编器、链接器和运行时库等。GCC的一个重要特点是跨平台支持,它可以在多种操作系统上编译目标代码,包括Linux、Windows、macOS等。GCC使用GPL许可证,因此是免费软件,并且可以进行修改和重新分发。

2.Linux中的GCC

许多Linux的发行版(如Centos,Ubuntu等)都默认安装了GCC,但实际上Linux自带的GCC编译器版本太低了,推荐大家使用命令

gcc --version
正在上传…重新上传取消

查看自己虚拟机的GCC版本,如果你的版本太低,这边也建议更新哦。同时也有的Linux发行版没有自带GCC编译器,刚好我们一起安装。

3.安装前提

GCC对GMP、MPFR、MPC有依赖,因此先需要安装相对应的库。

四.GCC安装过程

一步安装到位:

yum -y install gcc

使用上述命令即可一步安装到位,但是它安装的默认是对应的Linux发行版默认的版本,不是最新版。

最新版的教程如下:

  • 1.安装依赖
yum -y install wget bzip2 gcc-c++
  • 2.安装目录
mkdir /opt/gcc && cd /opt/gcc
  • 3.安装包下载
wget http://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz
注意:http://ftp.gnu.org/gnu/gcc获取最新版下载链接并替换
  • 4.安装包解压
tar -zxvf gcc-12.2.0.tar.gz && rm -rf gcc-12.2.0.tar.gz
  • 5.安装配置
cd /opt/gcc/gcc-12.2.0
./contrib/download_prerequisites
./configure --prefix=/opt/gcc/gcc-12.2.0 -disable-multilib
  • 6.编译安装
make -j16 && make install
注意:安装时间非常久,建议临时增加核心数量,-j16表示16个编译命令同时执行
  • 7.环境变量
echo "export GCC_HOME=/opt/gcc/gcc-12.2.0" >> /etc/profile
echo "export PATH=\$GCC_HOME/bin:\$PATH" >> /etc/profile
source /etc/profile
  • 8.卸载旧版本
yum -y remove gcc
  • 9.查看新版本
gcc -v
  • 10.更新动态库
查看旧动态库:strings /usr/lib64/libstdc++.so.6 | grep CXXABI
删除旧动态库:rm -f /usr/lib64/libstdc++.so.6
新动态库位置:/opt/gcc/gcc-12.2.0/lib64/libstdc++.so.6.X.XX
链接新动态库:ln -s /opt/gcc/gcc-12.2.0/lib64/libstdc++.so.6.0.30 /usr/lib64/libstdc++.so.6
查看新动态库:strings /usr/lib64/libstdc++.so.6 | grep CXXABI

此最新版教程来源于:GCC最新版安装

五.实现C语言程序

  • 1.建立一个.c文件
vim hello.c
  • 2.vim编辑器编辑

在文本输入你要编写的C语言程序内容,保存后退出

  • 3.编译源程序
gcc hello.c -o hello
  • 4.运行该可执行文件
./hello
  • 5.输出结果

 六.补充

         文章中的命令如果你有什么地方不懂,可以查看同系列Linux专栏的其他三篇文章,那是我最近参加新星计划系统学习的,详细介绍了Linux常用的命令和运维基础。

Linux运维基础1

Linux运维基础2

Linux运维基础3

        这次的文章是我之前零散的接触Linux时做的笔记,现在进行导入而已,有些基础。但是后面我要介绍Linux下的链接库和makefile就必须知道C语言在Linux下运行过程,核心是过程,操作很简单。

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

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

相关文章

从0开始搭建一个简单的前后端分离的XX系统-vue+Springboot+mybatis-plus+mysql

一、准备工作 1.安装node 2.idea 旗舰版** idea**教程 上述教程中的idea**工具 3.安装mysql任意版本 mysql 4.安装mysql workbench(没用上) 5.安装navicate 参考文章:百度-从小白到架构(作者)-Navicat16** Nav…

Thinkphp获取项目最近更改变动的所有文件

导读: 企业级的网站项目都是要不断优化迭代更新的,做为一名后端程序员,在编写更新模块时,如何能快速获取最近修改的文件,然后打包压缩成更新补丁呢?我们先来看一下最终效果图: 步骤&#xff1a…

使用FFMPEG分离mp4/flv文件中的264视频和aac音频

准备 ffmpeg 4.4 一个MP4或flv格式的视频文件 分离流程 大致分为以下几个简单步骤: 1.使用avformat_open_input 函数打开文件并初始化结构AVFormatContext 2.查找是否存在音频和视频信息 3.构建一个h264_mp4toannexb比特流的过滤器,用来给视频avpa…

Hudi 数据湖技术之集成Flink

目录 1 安装Flink2 快速入门2.1 集成Flink概述2.2 环境准备2.3 创建表2.4 插入数据2.5 查询数据2.6 更新数据 3 Streaming query3.1 创建表3.2 查询数据3.3 插入数据 4 Flink SQL Writer4.1 Flink SQL集成Kafka4.2 Flink SQL写入Hudi4.2.1 创建Maven Module4.2.2 消费Kafka数据…

【C++】了解设计模式、 stackqueue的使用与模拟实现

文章目录 1.设计模式2.stack1.stack的使用1.stack的结构2.stack的接口 2.stack的模拟实现1.stack的结构2.接口实现 3.queue1.queue的使用1.queue的结构3.queue的接口 2.queue的模拟实现1.queue的结构2.接口实现 4.了解deque1.deque的原理介绍2.deque的底层结构3.deque的迭代器设…

Codeforces Round 861 (Div. 2)(A~D)

A. Lucky Numbers 给出边界l和r,在区间[l, r]之间找到幸运值最大的数字。一个数字的幸运值被定义为数位差的最大值,即数字中最大的数位和最小的数位的差。 思路:因为涉及到至少两位,即个位和十位变化最快,最容易得到相…

Android四大组件之广播接收者BroadcastReceiver

一、全局广播 Android中的广播可以分为两种类型:标准广播和有序广播 标准广播:一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序。无法进行…

Vector-常用CAN工具 - 入门到精通 - 专栏链接

一、CANoe篇 1、CANoe入门到精通_软件安装 2、CANoe入门到精通_硬件及环境搭建 3、CANoe入门到精通_软件环境配置 4、CANoe入门到精通_Network Node CAPL开发 5、CANoe入门到精通_Node节点开发基本数据类型 6、CANoe入门到精通_Test Node节点开发设置 7、CANoe入门到精通…

《Cocos Creator游戏实战》AIGC之将草稿内容转为真实内容

目录 前言 训练AI 从识别结果中提取必要数据 发送图片并生成最终代码 总结与提高 资源下载 前言 当创作灵感来的时候,我们可能会先把灵感记录在草稿上,之后再去实现它。比方说有一天,我突然来了游戏创作灵感,想着那可以先把…

gpt 怎么用-免费gpt下载使用方法

gpt 怎么用 GPT(Generative Pre-trained Transformer)是一种基于Transformer的神经网络模型,用于自然语言处理任务,例如文本生成、摘要生成、翻译、问答等。以下是使用GPT进行文本生成的一般步骤: 首先,您…

编译预处理

编译预处理 1、宏定义1.1、 无参宏定义1.2、使用宏定义的优点1.3、宏定义注意点1.4、带参数的宏(重点)1.5、条件编译1.6、宏定义的一些巧妙用法(有用)1.7、结构体占用字节数的计算原则(考题经常考,要会画图)1.8、#在宏定义中的作用&#xff0…

转型产业互联网,新氧能否再造辉煌?

近年来,“颜值经济”推动医美行业快速发展,在利润驱动下,除了专注医美赛道的企业之外,也有不少第三方互联网平台正强势进入医美领域,使以新氧为代表的医美企业面对不小发展压力,同时也展现出强大的发展韧性…

六、CANdelaStudio入门-通信参数编辑

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的通信参数编辑,欢迎各位朋友订阅、评论,…

Kubernetes 笔记(16)— 集群管理、使用名字空间分隔系统资源、给名字空间设置资源限额、默认资源配额的使用

1. 为什么要有名字空间 首先要明白,Kubernetes 的名字空间并不是一个实体对象,只是一个逻辑上的概念。它可以把集群切分成一个个彼此独立的区域,然后我们把对象放到这些区域里,就实现了类似容器技术里 namespace 的隔离效果&…

MATLAB符号运算(七) 更新中...

目录 1、实验目的: 2、实验内容: 1、实验目的: 1)掌握定义符号对象和创建符号表达式的方法; 2)掌握符号运算基本命令和规则; 3)掌握符号表达式的运算法则以及符号矩阵运算&#xf…

93、Dehazing-NeRF: Neural Radiance Fields from Hazy Images

简介 论文:https://arxiv.org/pdf/2304.11448.pdf 从模糊图像输入中恢复清晰NeRF 使用大气散射模型模拟有雾图像的物理成像过程,联合学习大气散射模型和干净的NeRF模型,用于图像去雾和新视图合成 通过将NeRF 3D场景的深度估计与大气散射模…

【牛客刷题专栏】23:JZ22 链表中倒数最后k个结点(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录 前言问…

LeetCode-344. 反转字符串

题目链接 LeetCode-344. 反转字符串 题目描述 题解 题解一(Java) 作者:仲景 直接双指针前后一直交换即可 class Solution {public void reverseString(char[] s) {if (s.length 1)return;// 双指针int lp 0, rp s.length - 1;while (lp…

【百度智能云】基于http3的xcdn 开放直播方案设计与实践

大神:柯老师 现有的融合CDN 0 需要集成sdksdk 是集成在端侧缺点 sdk 对端侧有影响多云模式下,sdk不互通、 XCDN 设计目标 :保持现有cdn的优势 承载各种业务:直播点播让各家的cdn互通cdn 厂家屏蔽了差异性,集成起来比较简单,对接简单开发的互联网生态。使用统一的http3标…

理解缓冲区

文章目录 一.缓冲区1.什么是缓冲区2.缓冲区的意义3.缓冲区的刷新策略4.我们目前谈论的缓冲区在哪里5.仿写FILE5.1myStdio.h5.2myStdio.c 6.操作系统的缓冲区 一.缓冲区 int main() {printf("hello linux");sleep(2);return 0; }对于这样的代码,首先可以肯…