【Linux知识】Linux上从源码编译到软件安装全过程详细说明

news/2025/2/27 11:42:30

文章目录

      • **1. 下载源码**
        • **(1) 使用 `wget` 或 `curl` 下载**
        • **(2) 解压源码**
      • **2. 配置编译环境**
        • **(1) 执行 `./configure` 脚本**
          • 常见参数说明:
      • **3. 编译源码**
        • **(1) 执行 `make`**
      • **4. 安装软件**
        • **(1) 执行 `make install`**
        • **(2) 自定义安装路径**
      • **5. 验证安装**
        • **(1) 检查版本信息**
        • **(2) 查看安装路径**
      • **6. 清理编译文件**
        • **(1) 删除临时文件**
        • **(2) 删除安装文件**
      • **7. 示例:从源码编译安装 Nginx**
        • **(1) 下载并解压**
        • **(2) 配置编译环境**
        • **(3) 编译与安装**
        • **(4) 启动 Nginx**

在 Linux 系统中,从源码编译并安装软件是一个常见的操作。以下是详细的命令行步骤以及参数说明。

1. 下载源码

(1) 使用 wgetcurl 下载
wget http://example.com/software-1.0.tar.gz  # 使用 wget 下载
# 或者
curl -O http://example.com/software-1.0.tar.gz  # 使用 curl 下载
  • wgetcurl 是常用的下载工具。
  • -O 参数表示将文件保存为默认名称。
(2) 解压源码

根据压缩包的格式选择解压命令:

tar -zxvf software-1.0.tar.gz  # 解压 .tar.gz 文件
tar -jxvf software-1.0.tar.bz2  # 解压 .tar.bz2 文件
unzip software-1.0.zip  # 解压 .zip 文件
  • tar -zxvf:解压 .tar.gz 文件。
  • tar -jxvf:解压 .tar.bz2 文件。
  • unzip:解压 .zip 文件。

2. 配置编译环境

进入解压后的源码目录:

cd software-1.0
(1) 执行 ./configure 脚本
./configure [选项]
常见参数说明:
  • --prefix=PATH:指定安装路径,默认为 /usr/local
    ./configure --prefix=/opt/software
    
  • --enable-FEATURE:启用特定功能模块。
    ./configure --enable-feature-name
    
  • --disable-FEATURE:禁用特定功能模块。
    ./configure --disable-feature-name
    
  • --with-PACKAGE=DIR:指定外部依赖库的路径。
    ./configure --with-openssl=/usr/local/openssl
    
  • --without-PACKAGE:不使用某个外部依赖库。
    ./configure --without-openssl
    
  • --help:查看所有可用选项。
    ./configure --help
    

3. 编译源码

(1) 执行 make
make
  • make 会根据 Makefile 文件中的规则编译源码。
  • 如果需要加速编译,可以使用 -j 参数指定并发线程数(通常为 CPU 核心数)。
    make -j4  # 使用 4 个线程并发编译
    

4. 安装软件

(1) 执行 make install
sudo make install
  • make install 会将编译好的文件复制到指定的安装路径。
  • 需要 sudo 权限才能写入系统目录(如 /usr/local)。
(2) 自定义安装路径

如果在 ./configure 阶段指定了 --prefix 参数,则安装路径会被设置为该值。例如:

./configure --prefix=/opt/software
sudo make install

安装后,可执行文件通常位于 bin 子目录下,配置文件位于 etc 子目录下。

5. 验证安装

(1) 检查版本信息

运行以下命令检查软件是否成功安装:

software --version  # 替换为实际软件名称
(2) 查看安装路径

可以通过 whichwhereis 命令查找可执行文件的位置:

which software  # 查找可执行文件路径
whereis software  # 查找可执行文件、源码和手册页

6. 清理编译文件

(1) 删除临时文件
make clean  # 删除编译过程中生成的临时文件
make distclean  # 删除所有生成的文件,包括配置文件
(2) 删除安装文件

如果需要卸载软件,可以手动删除安装路径下的文件。例如:

sudo rm -rf /opt/software  # 替换为实际安装路径

7. 示例:从源码编译安装 Nginx

以下是一个完整的 Nginx 编译安装示例:

(1) 下载并解压
wget http://nginx.org/download/nginx-1.25.3.tar.gz
tar -zxvf nginx-1.25.3.tar.gz
cd nginx-1.25.3
(2) 配置编译环境
./configure \
--prefix=/opt/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-pcre=/path/to/pcre-source
  • --prefix=/opt/nginx:指定安装路径。
  • --with-http_ssl_module:启用 HTTPS 支持。
  • --with-http_v2_module:启用 HTTP/2 支持。
  • --with-pcre:指定 PCRE 库路径。
(3) 编译与安装
make -j4
sudo make install
(4) 启动 Nginx
/opt/nginx/sbin/nginx

通过以上步骤,你可以从源码编译并安装任何支持 Makefile 的软件。如果有特殊需求,可以根据软件的文档调整配置参数。


http://www.niftyadmin.cn/n/5870059.html

相关文章

【红队利器】单文件一键结束火绒6.0

关于我们 4SecNet 团队专注于网络安全攻防研究,目前团队成员分布在国内多家顶级安全厂商的核心部门,包括安全研究领域、攻防实验室等,汇聚了行业内的顶尖技术力量。团队在病毒木马逆向分析、APT 追踪、破解技术、漏洞分析、红队工具开发等多个…

Linux Kernel Connection Tracking Table

在 Linux 内核中,连接跟踪表(Connection Tracking Table,简称 conntrack)是一个用于跟踪网络连接状态的核心组件。它主要由 Netfilter 框架管理,广泛应用于防火墙、NAT(网络地址转换)和负载均衡…

计算机工具基础(五)——Vim

Vim 本系列博客为MIT《Missing in CS Class(2020)》课程笔记 Vim是终端环境中常用的纯文本编辑器。 模式 Vim有如下5种模式: 常规模式(Normal):进入Vim后的默认模式,用于阅读文件。以Esc自其他模式中退至此模式插入模式(Insert)&#xff1…

探索AI新前沿,CoT推理赋能文生图!港中文首次提出文生图的o1推理和inference scaling新范式

OpenAI的o1模型凭借思维链(Chain-of-Thought, CoT)技术,在推理能力上实现了质的飞跃,引领了大模型理解领域的新风尚。然而,这一创新的火花能否照亮图像生成领域?近日,来自香港中文大学、北京大学…

使用消息队列怎样防止消息重复?

大家好,我是君哥。 使用消息队列时,我们经常会遇到一个可能对业务产生影响的问题,消息重复。在订单、扣款、对账等对幂等有要求的场景,消息重复的问题必须解决。 那怎样应对重复消息呢?今天来聊一聊这个话题。 1.三…

基于阿里云PAI平台快速部署DeepSeek大模型实战指南

一、DeepSeek大模型:企业级AI应用的新标杆 1.1 为什么选择DeepSeek? 近期,DeepSeek系列模型凭借其接近GPT-4的性能和开源策略,成为全球开发者关注的焦点。在多项国际评测中,DeepSeek-R1模型在推理能力、多语言支持和…

地基JDK8新特性之Lambda 表达式和Stream 流操作

一、Lambda 表达式基础 1. 替代匿名内部类 // 传统写法 Runnable r1 new Runnable() {Overridepublic void run() {System.out.println("Hello World");} };// Lambda 写法 Runnable r2 () -> {System.out.println("hello");}; 2. 函数式接口排序…

7. 覆盖率:covergroup/coverpoint/cross

文章目录 前言一、核心概念剖析1. covergroup‌2.coverpoint‌3. cross‌4. 覆盖率三要素对比表 二、实现模式指南2.1 covergroup2.2 coverpoint2.3 cross2.3 拓展知识1. 智能bins生成‌2. 权重控制‌3. 条件覆盖‌4. 自动分仓5. 手动分仓6. 条件过滤 三、典型应用场景3.1 cove…