Linux下实现C语言程序

简介: Linux下实现C语言程序

一.情况说明

    写这篇博客的情况比较复杂,首先我本来是参加新星计划按照规划现在去学习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.安装目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

五.实现C语言程序

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

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

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

六.补充

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


Linux运维基础1


Linux运维基础2


Linux运维基础3


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


相关文章
|
3月前
|
存储 自然语言处理 编译器
【C语言】编译与链接:深入理解程序构建过程
【C语言】编译与链接:深入理解程序构建过程
|
4月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
234 6
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
68 5
|
2月前
|
C语言
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性。本文探讨了C语言中的错误类型(如语法错误、运行时错误)、基本处理方法(如返回值、全局变量、自定义异常处理)、常见策略(如检查返回值、设置标志位、记录错误信息)及错误处理函数(如perror、strerror)。强调了不忽略错误、保持处理一致性及避免过度处理的重要性,并通过文件操作和网络编程实例展示了错误处理的应用。
75 4
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
65 1
|
2月前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
47 2
|
2月前
|
程序员 C语言
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门。本文深入探讨了指针的基本概念、声明方式、动态内存分配、函数参数传递、指针运算及与数组和函数的关系,强调了正确使用指针的重要性,并鼓励读者通过实践掌握这一关键技能。
44 1
|
3月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
87 1
|
4月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
54 5
|
3月前
|
存储 文件存储 C语言
深入C语言:文件操作实现局外影响程序
深入C语言:文件操作实现局外影响程序