Linux 系统中从源码编译安装软件

以下是 Linux 系统中 从源码编译安装软件 的详细步骤和注意事项,帮助你掌握这一高级操作技能:


一、编译安装的核心流程

1. 下载源码包(通常为 .tar.gz/.tar.bz2/.tar.xz)
2. 解压源码包
3. 进入源码目录
4. 配置编译参数(`./configure`)
5. 编译源码(`make`)
6. 安装软件(`make install`)
7. 验证安装结果

二、详细步骤说明

1. 下载源码包
  • 官方来源:通常从项目官网或 GitHub 仓库下载。
    # 示例:下载 Redis 7.0.12
    wget https://download.redis.io/releases/redis-7.0.12.tar.gz
    
2. 解压源码包
# 解压 .tar.gz 文件
tar -xzvf redis-7.0.12.tar.gz# 解压 .tar.bz2 文件
tar -xjvf package.tar.bz2# 解压 .tar.xz 文件
tar -xJvf package.tar.xz
3. 进入源码目录
cd redis-7.0.12
4. 配置编译参数
  • 基础配置:运行 ./configure 脚本检测系统环境。
    ./configure --prefix=/usr/local/redis  # 指定安装路径
    
  • 常用配置选项
    选项说明
    --prefix=/path指定安装目录(默认 /usr/local
    --enable-debug启用调试模式
    --with-依赖库指定依赖库路径(如 --with-openssl
5. 编译源码
make -j$(nproc)  # 使用所有 CPU 核心加速编译

注意:使用make命令进行编译安装之前必须确保计算机上安装了源代码对应的编译器,例如,若源代码是C语言编写的,需要使用如下命令提前安装gcc编译器

yum install -y gcc
6. 安装软件
sudo make install  # 需要管理员权限
7. 验证安装
# 示例:检查 Redis 是否安装成功
/usr/local/redis/bin/redis-server --version

三、常见问题与解决方案

1. 依赖缺失
  • 错误示例configure: error: zlib not found
  • 解决方法:安装编译所需的开发库。
    # CentOS/RHEL
    sudo yum install zlib-devel# Debian/Ubuntu
    sudo apt install zlib1g-dev
    
2. 权限不足
  • 错误示例make install: Permission denied
  • 解决方法:使用 sudo 提升权限。
    sudo make install
    
3. 清理编译文件
  • 删除编译生成的中间文件
    make clean    # 清理大部分生成文件
    make distclean  # 彻底清理并恢复源码包状态
    
4. 自定义安装路径
  • 将软件安装到用户目录
    ./configure --prefix=$HOME/myapp
    make && make install
    

四、典型场景示例

1. 编译安装 Nginx
# 1. 下载源码
wget http://nginx.org/download/nginx-1.25.3.tar.gz
tar -xzvf nginx-1.25.3.tar.gz# 2. 配置编译参数
./configure \--prefix=/usr/local/nginx \--with-http_ssl_module# 3. 编译并安装
make && sudo make install# 4. 启动 Nginx
/usr/local/nginx/sbin/nginx
2. 编译安装 Redis
# 1. 下载源码
wget https://download.redis.io/releases/redis-7.0.12.tar.gz
tar -xzvf redis-7.0.12.tar.gz# 2. 编译安装
make
sudo make install PREFIX=/usr/local/redis# 3. 启动 Redis
/usr/local/redis/bin/redis-server

五、注意事项

  1. 依赖管理
    • 编译前务必安装所有依赖库(通过 yum/apt/dnf)。
  2. 备份配置
    • 编译前可备份原有配置文件(如 /etc/nginx/nginx.conf)。
  3. 系统兼容性
    • 确保源码支持当前系统内核版本(如 CentOS 7 vs. CentOS 9)。
  4. 卸载方式
    • 编译安装的软件需手动删除文件(rm -rf /安装路径)。

六、编译安装 vs. 包管理器安装

对比项编译安装包管理器安装
灵活性高(可自定义参数、路径)低(依赖系统仓库配置)
依赖管理需手动解决依赖自动解决依赖
生成应用程序位置当前编译的目录usr/bin
维护成本高(需手动升级、卸载)低(通过包管理器统一管理)
适用场景需要定制化或最新版本的软件常规软件安装与系统维护

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

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

相关文章

HTTP:二.URI及相关术语

HTTP相关技术和术语 WEB开发语言 **http:**Hyper Text Transfer Protocol 应用层协议,默认端口: 80/tcp WEB前端开发语言: htmlcssjavascripthtml Hyper Text Markup Language 超文本标记语言,编程语言,主要负责实现页面的结构 范例:html 语言 <html> <h…

Java网络编程干货

1.网络编程是什么 了解 在Java语言中&#xff0c;我们可以使用java.net包下的技术轻松开发出常见的网络应用程序&#xff0c;从而把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统&#x…

Java—HTML:CSS选择器

今天我要介绍的知识点内容是Java HTML中的CSS选择器&#xff1b; CSS选择器用于定位HTML元素并为其添加样式。它允许我们控制网页的颜色、字体、布局和其他视觉元素。通过分离内容与样式。 下面我将介绍CSS中选择器的使用&#xff0c;并作举例说明&#xff1b; 选择器基本语…

【2025蓝桥杯】赛前2小时考点梳理C++版

【2025蓝桥杯】赛前2小时考点梳理 1. &#x1f9e9; STL&#xff08;优先级最高&#xff09; 核心容器/函数 vector push_back() / pop_back() / size()string substr(pos, len) / find(str) / queue push() / front() / pop()priority_queue 默认大根堆&#xff0c;小根堆&…

汽车性能的幕后保障:慧通测控电动尾翼综合力学测试浅析

在汽车性能不断追求极致的当下&#xff0c;电动尾翼已成为众多高性能车型以及部分新能源汽车提升空气动力学表现与操控稳定性的关键配置。从炫酷的超跑到注重续航与驾驶体验的新能源车&#xff0c;电动尾翼正逐渐崭露头角。它绝非仅仅是外观上的装饰&#xff0c;而是能在车辆行…

2、文件上传漏洞的防范

原文地址:文件上传漏洞的防范 更多内容请关注&#xff1a;代码安全 PHP安全编码——书写安全的代码 文件上传漏洞的防范 提问 问题1&#xff1a;上传漏洞是怎么产生的&#xff1f; 问题2&#xff1a;是否可以只用js判断文件类型而php不判断&#xff1f; 问题3&#…

06软件测试需求分析案例-添加用户

给职业顾问部的老师添加用户密码后&#xff0c;他们才能登录使用该软件。只有admin账户具有添加用户、修改用户信息、删除用户的权利。admin是经理或团队的第一个人的账号&#xff0c;后面招一个教师就添加一个账号。 通读需求是提取信息&#xff0c;提出问题&#xff0c;输出…

Ex-Human:在DigitalOcean云平台之上,构建下一代 AI 数字人

Ex-Human 正在通过创造极具吸引力和富有同理心的人工智能角色&#xff0c;重新定义人们与人工智能的互动方式。该公司由 Artem Rodichev 创立&#xff0c;让用户能够通过文本、图像、视频和音频创建能互动的独一无二的数字人物。凭借每月超过一百万的活跃用户和五百万个定制创建…

从零实现HTTP服务器

响应&#xff1a; 第一部分测试代码&#xff0c;读取请求 Makefile binhttpserver #生成的可执行程序 ccg #编译器名称 LD_FLAGS-stdc11 -lpthread #-DDEBUG1 #链接选项 srcmain.cc$(bin):$(src)$(cc) -o $ $^ $(LD_FLAGS).PHONY:clean clean:rm -f $(bin) 1111111 main.cc…

构建高可靠C++服务框架:从日志系统到任务调度器的完整实现

构建高可靠C服务框架&#xff1a;从日志系统到任务调度器的完整实现 一、深度解析示例代码技术体系 1.1 日志系统的进阶应用 示例代码中的ZRY_LOG_XXX宏展示了基础日志功能&#xff0c;但在生产环境中我们需要更完善的日志系统&#xff1a; 推荐技术栈组合&#xff1a; sp…

小张的工厂进化史——工厂模式

小张的工厂进化史——工厂模式 一、简单工厂模式&#xff1a;全能生产线二、工厂方法模式&#xff1a;分品牌代工三、抽象工厂模式&#xff1a;生态产品族四、三种模式核心对比表五、结合Spring实现简单工厂&#xff08;实践&#xff09; 小张从华强北起家&#xff0c;最初只有…

Python中的eval()函数详解

文章目录 Python中的eval()函数详解基本语法基本用法安全性问题安全使用建议实际应用场景与exec()的区别性能考虑总结 Python中的eval()函数详解 eval()是Python的一个内置函数&#xff0c;用于执行字符串形式的Python表达式并返回结果。它是一个强大但需要谨慎使用的函数。 …

银行业务发展历史

银行业务发展历史 银行业务的发展可以追溯到古代&#xff0c;但其现代形式的发展可以追溯到中世纪。以下是银行业务发展的主要历史阶段&#xff1a; 1. 古代和中世纪时期 特点&#xff1a;商人提供贷款和存款服务&#xff0c;充当中间人转移资金&#xff0c;发行纸币作为支付…

SQL实战篇,数据库在Kooboo中的实际应用(一)

本文将结合实际操作与代码示例&#xff0c;展示SQL 在 Kooboo 中的实际应用 仅需两步&#xff1a;动态创建表 基础查询&#xff0c;无需复杂配置&#xff0c;快速上手&#xff01; 一、动态创建表&#xff1a;插入数据 Kooboo 支持多种数据库&#xff0c;以 SQLite 为例&…

克魔助手(Kemob)安装与注册完整教程 - Windows/macOS双平台指南

iOS设备管理工具克魔助手便携版使用全指南 前言&#xff1a;为什么需要专业的iOS管理工具 在iOS开发和设备管理过程中&#xff0c;开发者经常需要突破系统限制&#xff0c;实现更深层次的控制和调试。本文将详细介绍一款实用的便携式工具的使用方法&#xff0c;帮助开发者快速…

搜索插入位置 -- 二分查找

目录 一&#xff1a;题目 二:算法原理 三&#xff1a;代码分析 一&#xff1a;题目 题目链接&#xff1a;35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 二:算法原理 三&#xff1a;代码分析 class Solution { public:int searchInsert(vector<int>&am…

Apache Doris内存与超时参数配置详解

一、查询任务内存限制调整 1. ​默认内存限制与问题定位 Apache Doris默认限制单个BE节点上的查询任务内存使用不超过2GB&#xff08;即exec_mem_limit2147483648字节&#xff09;。当复杂查询或大规模数据操作超过此限制时&#xff0c;会触发Memory limit exceeded错误。通过…

龙虎榜——20250411

今天缩量&#xff0c;上方压力依然在&#xff0c;外围还在升级&#xff0c;企稳还需要时日。 2025年4月11日龙虎榜行业方向分析 一、核心主线方向 半导体与芯片&#xff08;国产替代加速&#xff09; • 代表标的&#xff1a;圣邦股份&#xff08;模拟芯片&#xff09;、中电…

若依前后端分离版本从mysql切换到postgresql数据库

一、修改依赖&#xff1a; 修改admin模块pom.xml中的依赖,屏蔽或删除mysql依赖&#xff0c;增加postgresql依赖。 <!-- Mysql驱动包 --> <!--<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId> &l…

自定义排序注意点

这段 Java 代码展示了两种排序方式的用法&#xff0c;分别是&#xff1a; 对普通数组进行排序&#xff08;Integer[] nums&#xff09;对对象数组进行排序&#xff08;Student[] students&#xff09; 我来一步步给你讲清楚&#xff1a; ✅ 第1部分&#xff1a;普通数组降序排…