KICK第四讲Linux 系统下安装 GCC 编译器全指南
Linux 系统下安装 GCC 编译器全指南
GCC(GNU Compiler Collection)是 Linux 系统下最常用的编译器之一,支持 C/C++、Java 等多种编程语言。本文将介绍不同 Linux 发行版下的安装方法,帮助开发者快速配置开发环境。
一、使用包管理器快速安装(推荐)
大多数 Linux 发行版通过官方仓库提供 GCC,适合新手快速部署。
-
Debian/Ubuntu 系列(apt-get)
- 打开终端,更新软件包列表:
sudo apt update && sudo apt upgrade - 安装编译工具包(含 GCC、G++、Make 等):
sudo apt install build-essential - 验证安装:
gcc --version
- 打开终端,更新软件包列表:
-
RedHat/CentOS 系列(yum)
- 启用开发者工具组:
sudo yum groupinstall "Development Tools" - 或直接安装 GCC:
sudo yum install gcc
- 启用开发者工具组:
二、通过 RPM 包手动安装(适合特定版本需求)
若需安装指定版本,可从 RPM 仓库下载二进制包。
- 搜索 RPM 包:访问 rpm.pbone.net,输入关键词(如
gcc-4.1.2)查找匹配的包。 - 下载后按顺序安装依赖:
sudo rpm -ivh cpp-4.1.2-42.el5.i386.rpm sudo rpm -ivh kernel-headers-2.6.18-92.el5.i386.rpm sudo rpm -ivh glibc-headers-2.5-24.i386.rpm sudo rpm -ivh glibc-devel-2.5-24.i386.rpm sudo rpm -ivh libgomp-4.1.2-42.el5.i386.rpm sudo rpm -ivh gcc-4.1.2-42.el5.i386.rpm - 卸载命令:
sudo rpm -e gcc
注意:RPM 安装需手动处理依赖关系,建议优先使用包管理器。
三、从源代码编译安装(高级用户适用)
若需自定义配置或安装最新版本,可通过源码编译。
-
下载依赖库:
- GMP:ftp://ftp.gnu.org/gnu/gmp/
- MPFR:ftp://ftp.gnu.org/gnu/mpfr/
- MPC:ftp://ftp.gnu.org/gnu/mpc/
-
依次编译安装依赖:
# 以 GMP 为例 tar -jxvf gmp-5.0.1.tar.bz2 cd gmp-5.0.1 mkdir temp && cd temp ../configure --prefix=/usr/local/gmp-5.0.1 make && sudo make install- MPFR 和 MPC 需指定依赖路径:
../configure --prefix=/usr/local/mpfr-3.1.0 --with-gmp=/usr/local/gmp-5.0.1
- MPFR 和 MPC 需指定依赖路径:
-
安装 GCC:
- 下载 GCC 源码(如
gcc-4.3.4.tar.gz)并解压:tar -zxvf gcc-4.3.4.tar.gz cd gcc-4.3.4 - 配置编译参数(指定依赖路径):
./configure --prefix=/usr/local/gcc-4.3.4 --enable-languages=c,c++ --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.0 --with-mpc=/usr/local/mpc-1.0.2 - 编译并安装(耗时较长):
make -j$(nproc) && sudo make install
- 下载 GCC 源码(如
-
配置环境变量:
- 将 GCC 路径添加到
PATH:echo 'export PATH=/usr/local/gcc-4.3.4/bin:$PATH' >> ~/.bashrc source ~/.bashrc
- 将 GCC 路径添加到
四、多版本管理与验证
-
切换 GCC 版本(Ubuntu):
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10 sudo update-alternatives --config gcc -
验证安装:
gcc --version g++ --version
总结建议
- 新手推荐:使用
apt-get或yum快速安装稳定版本。 - 版本控制:通过 PPA 仓库(如
ubuntu-toolchain-r/test)获取更新版本。 - 定制需求:源码编译适合深度优化或特殊依赖场景。
安装完成后,开发者可通过 gcc -v 确认版本,并开始编写第一个 C 程序:
#include <stdio.h>
int main() { printf("Hello, GCC!\n"); return 0; }
编译运行:
gcc hello.c -o hello && ./hello
相关文章:
KICK第四讲Linux 系统下安装 GCC 编译器全指南
Linux 系统下安装 GCC 编译器全指南 GCC(GNU Compiler Collection)是 Linux 系统下最常用的编译器之一,支持 C/C、Java 等多种编程语言。本文将介绍不同 Linux 发行版下的安装方法,帮助开发者快速配置开发环境。 一、使用包管理…...
深入理解 MySQL 锁:基于 InnoDB 的并发控制解析
在数据库并发访问管理中,MySQL 提供了强大的锁机制来保证数据的一致性和完整性。作为默认存储引擎的 InnoDB,为 MySQL 带来了细粒度的锁控制,使其成为高并发应用的理想选择。本文将深入探讨 MySQL 的锁类型、分类、应用场景及其对性能的影响&…...
Linux Nginx安装部署、注册服务
1、下载:https://nginx.org/en/download.html 下载nginx-1.27.4.tar.gz,上传到服务器 /opt/目录 在开始安装Nginx之前,首先需要安装一些依赖项,以确保Nginx编译和运行正常。打开终端并执行以下命令: yum install -y …...
安全的实现数据备份和恢复
📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…...
PGSQL基本使用
PGSQL基本使用 文章目录 PGSQL基本使用日期转换长度不够补数获取上下行取连续的开始和结束的值 日期转换 格式说明YYYY年MM月DD日hh2424小时制mi分钟ss秒 -- 日期字符串转指定日期字符串 -- 20250101123000 转为 2025-01-01 12:30:00 select to_char(to_timestamp(2025010112…...
excel中两个表格的合并
使用函数: VLOOKUP函数 如果涉及在excel中两个工作表之间进行配对合并,则: VLOOKUP(C1,工作表名字!A:B,2,0) 参考: excel表格中vlookup函数的使用方法步骤https://haokan.baidu.com/v?pdwisenatural&vid132733503560775…...
在 Windows 上快速部署 OpenManus:从安装到运行
在当今快速发展的 AI 领域,OpenManus 作为一个强大的开源工具,为开发者提供了便捷的 AI 应用开发体验。本文将详细介绍如何在 Windows 系统上安装并运行 OpenManus,帮助你快速搭建一个本地的 AI 开发环境。 一、安装 Anaconda Anaconda 是一…...
NLP常见任务专题介绍(4)-ConditionalGeneration和CasualLM区别
在 transformers 库中,ConditionalGeneration 和 CausalLM 是两种不同类型的语言模型,各自适用于不同的任务: 类别Conditional Generation (条件生成)CausalLM (因果语言模型)核心区别依赖输入 条件 生成文本只能 自回归 生成文本训练方式Encoder-Decoder(编码-解码) 结构…...
uniapp实现 uview1 u-button的水波纹效果
说明: 由于uview2已经移除水波纹效果,这边又觉得那个效果好看,所以开发这个功能(原谅我不会录动图) 效果: 具体代码: <view class"ripple-container" touchstart"handleTouchStart" touchend&…...
RabbitMQ报错:Shutdown Signal channel error; protocol method
报错信息: Shutdown Signal: channel error; protocol method: #method<channel.close>(reply-code406, reply-textPRECONDITION_FAILED - unknown delivery tag 1, class-id60, method-id80) 原因 默认情况下 RabbitMQ 是自动ACK(确认签收&…...
modbusrtu.h:5:10: error: ‘QSerialPort‘ file not found
解决 QSerialPort 头文件未找到的问题: 1. 确保已安装 Qt Serial Port 模块 QSerialPort 属于 Qt Serial Port 模块,需先确认已安装该模块。 安装步骤: 打开 Qt Maintenance Tool: 在开始菜单搜索并打开 Qt Maintenance Tool 选择当前安装的 Qt 版本,点击 “添加或移除…...
【后端】【django】导出 API 文档的几种方法
在 Django 项目里,导出 API 文档是很常见的需求,一般可以借助第三方库来实现。 使用 drf-yasg 导出 Swagger/OpenAPI 格式文档 drf-yasg 是一个用于 Django REST framework 的工具,能够自动生成 Swagger 和 OpenAPI 格式的 API 文档。 步骤…...
【Rust基础】Rust后端开发常用库
使用Rust有一段时间了,期间尝试过使用Rust做后端开发、命令行工具开发,以及做端侧模型部署,也尝试过交叉编译、FFI调用等,也算是基本入门了。在用Rust做后端接口开发时,常常会找不到一些合适库,而这些库在J…...
如何使用Cursor的claude-3.7模型来开发高保真的原型设计图,学会写好的提示词人人都是设计师
1、想要开发出高保真的设计图原型,需要给出cursor具体的提示词:比如我想开发一款IT面试题小程序,给出的提示词是这样的 我想开发一个 {IT面试题库小程序},现在需要输出高保真的原型图,请通过以下方式帮我完成所有界面…...
AGI大模型(5):提示词工程
1 什么是提示词工程(Prompt) 所谓的提示词其实指的就是提供给模型的⼀个⽂本⽚段,⽤于指导模型⽣成特定的输出或回答。提示词的⽬的是为模型提供⼀个任务的上下⽂,以便模型能够更准确地理解⽤户的意图,并⽣成相关的回…...
Redis Sentinel (哨兵模式)深度解析:构建高可用分布式缓存系统的核心机制
一、传统主从复制的痛点 在分布式系统架构中,Redis 作为高性能缓存和数据存储解决方案,其可用性直接关系到整个系统的稳定性。传统的主从复制架构虽然实现了数据冗余,但在面临节点故障时仍存在明显缺陷: 手动故障转移…...
微信小程序-实现锚点跳转,页面加载后自动跳转、点击跳转到指定位置
一、页面加载后滚动到指定位置,onLoad或onReady里执行。 scrollAfterLoading() {const query wx.createSelectorQuery()query.select(#cont1).boundingClientRect()query.selectViewport().scrollOffset()query.exec(function (res) {wx.pageScrollTo({scrollTop:…...
[LeetCode热门100题]|137,260,268,面试17.19
1、137 只出现一次数字|| 1、题目描述 137 只出现一次数字||https://leetcode.cn/problems/single-number-ii/description/ 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你…...
Android子线程更新View的方法原理
对于所有的Android开发者来说,“View的更新必须在UI线程中进行”是一项最基本常识。 如果不在UI线程中更新View,系统会抛出CalledFromWrongThreadException异常。那么有没有什么办法可以不在UI线程中更新View?答案当然是有的! 一…...
Kafka常用指令(详细)
Kafka常用指令(详细) 启停命令 前台启动 前台启动命令 ./bin/kafka-server-start.sh config/server.properties 后台启动方式1 后台启动命令加上参数-daemon,窗口关闭之后kafka后台程序继续运行 ./bin/kafka-server-start.sh -daemon co…...
Golang Channel 使用详解、注意事项与死锁分析
#作者:西门吹雪 文章目录 一、引言:Channel 在 Go 并发编程中的关键地位二、Channel 基础概念深度剖析2.1 独特特性2.2 类型与分类细解 三、Channel 基本使用实操指南3.1 声明与初始化3.3 单向 Channel 的运用 四、Channel 典型使用场景实战案例4.1 协程…...
使用LiteFlow实现阻塞审批工作流
在 LiteFlow 中实现阻塞的审批工作流,你可以使用异步处理与同步逻辑结合,实现节点的等待 使用 LiteFlow 实现阻塞审批工作流 下面是如何实现一个带有阻塞审批功能的 LiteFlow 工作流示例。 1. 引入依赖 确保您的 pom.xml 文件中已引入 LiteFlow 和 S…...
2025移动端软件供应链安全开源治理方案最佳实践
2025年3月13日,由中国软件评测中心、CAPPVD漏洞库联合主办的“第六期移动互联网APP产品安全漏洞技术沙龙”在海口成功召开。悬镜安全基于移动端数字供应链安全开源治理方案荣获中国软件评测中心“2024移动互联网APP产品安全漏洞治理”优秀案例,并获颁证书…...
Git Fast-forward 合并详解:原理、场景与最佳实践
在使用 Git 进行团队协作时,我们经常需要合并分支。合并方式有很多种,其中 Fast-forward(快速合并) 是一种最简单且无冲突的合并方式。本文将详细介绍 Fast-forward 的原理、适用场景、常见问题及最佳实践。 一、Fast-forward 合并…...
《C#上位机开发从门外到门内》2-3:SPI总线协议详解及应用实践
文章目录 一、引言二、SPI总线协议的基本原理三、SPI通信模式详解 —— CPOL与CPHA3.1 时钟极性(CPOL)3.2 时钟相位(CPHA)3.3 四种SPI模式 四、主从设备通信机制4.1 通信流程概述4.2 数据帧结构与传输细节4.3 主设备与从设备的协同…...
vscode出现:No module named ‘requests‘ 问题的解决方法
问题: ① No module named requests ② pip install requests:显示已经安装成功 运行失败原因: 我的失败原因是因为:我的python环境有两个,电脑C盘默认一个、pycharm下载后在它的路径下有一个。而vscode所运行的环境…...
【openwebui 搭建本地知识库(RAG搭建本地知识库)】
安装准备 openwebui 这个本地安装之前写过使用python安装。也可以直接用docker 命令 docker run --rm -d \-p 3080:8080 \-p 3081:8081 \-e WEBUI_AUTHtrue \-e DEFAULT_LOCALEcn \-e GLOBAL_LOG_LEVEL"INFO" \-e AIOHTTP_CLIENT_TIMEOUT100 \--privilegedtrue \-…...
Docker Compose 使用笔记
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具; docker-compose.yml 文件则是 Docker Compose 用来配置应用服务的核心文件,它以 YAML 格式编写。 YAML 文件用途: 服务定义:在 docker-compose.yml 文件中&…...
雷池WAF 处理 HTTP 请求的流程
项目介绍 SafeLine,中文名 "雷池",是一款简单好用, 效果突出的 Web 应用防火墙(WAF),可以保护 Web 服务不受黑客攻击。 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、…...
JAVA-Thread类实现多线程
引言: 本章博客涉及进程线程内容,如果不了解的可以看:什么是进程线程-CSDN博客 线程是操作系统的概念,操作系统提供的API供程序员使用操作。但是不同的操作系统(Winodws、Linux、Unix……差别很大),但是做为JAVA程序员就不需要担心…...
