首页/系统/信创系统运维速查/源码编译安装三步
命令与包管理65 条

源码编译安装三步

官方没提供 rpm/deb 包时的通用方案:安装开发工具链,./configure 生成 Makefile,make 编译,make install 安装到指定前缀。

信创系统运维速查系统更新于 2026-10-13

源码编译安装是什么

官方没提供 rpm 或 deb 包,或者需要自定义编译参数时,走源码编译:./configure 检测环境并生成 Makefile,make 编译,make install 安装到指定前缀。前提是本机有开发工具链和对应开发库。CMake 项目流程同理,只是改用 cmake -S . -B build 生成构建目录。适用于所有 Linux 发行版。

基本信息

适用平台全 Linux 发行版(RPM 系 dnf,DEB 系 apt)
三步流程./configure → make → make install
依赖Development Tools 组 + 对应 -devel / -dev 开发库
隔离习惯--prefix=/usr/local/<应用名>
卸载方式make uninstall(不一定提供)或手工删前缀目录

典型使用场景

  • 发行版仓库缺少目标软件或版本过旧,需要较新特性
  • 需要开启特定编译选项,如自定义 OpenSSL 路径或启用某模块
  • 内核模块与第三方驱动必须按当前内核版本编译
  • 内部自研程序交付到目标机本地编译
  • 排障对照:官方包行为异常时用源码版本验证

编译安装示例

编译安装示例
dnf group install -y 'Development Tools'     # 装工具链,DEB 系用 build-essential
dnf install -y openssl-devel zlib-devel      # 按 configure 报错补开发库
tar xf app-1.0.tar.gz && cd app-1.0
./configure --prefix=/usr/local/app          # 检测环境并生成 Makefile
make -j$(nproc)                              # 并行编译
sudo make install                            # 安装到前缀目录
echo /usr/local/app/lib > /etc/ld.so.conf.d/app.conf && ldconfig   # 登记库路径
/usr/local/app/bin/app --version             # 验证安装结果

configure 报错怎么读

报错关键字含义处理
cannot create executables工具链缺失或不完整补装 gcc、make、binutils
xxx.h: No such file缺头文件装对应 -devel / -dev 开发包
cannot find -lxxx缺库文件装库的开发包或指定 LDFLAGS
configure: error检测阶段失败看 config.log 里最后一段关键错误
make install 不写包管理数据库,卸载、升级与漏洞扫描都没有记录;生产优先用官方包,确需编译的要把版本、路径与参数登记进交付文档。
编译慢时用 make -j$(nproc) 并行,但部分老项目并行会因依赖顺序报错,此时退回单线程 make 反而更快。

动手前检查清单

  • 确认目标软件是否有官方包,有就优先用包管理安装
  • 记录本次编译的版本号、来源地址与全部编译参数
  • 核对 gcc 与 glibc 版本是否满足该软件的最低要求
  • 预留安装前缀目录并纳入备份与监控范围
  • 确认机器有足够内存,并行编译在内存不足时会被内核杀掉
CMake 项目流程不同:先 cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr/local/app 生成构建目录,再 cmake --build build -j8 编译,最后 cmake --install build 安装。

易错点

  • 报缺头文件时去改代码或硬加 -I 参数:正确做法是补装对应开发包(RPM 系 -devel、DEB 系 -dev)
  • 只看屏幕最后一行判断失败原因:关键错误常只写在 config.log 里,日志比屏幕输出完整
  • 把 --prefix 指向 /usr 覆盖发行版文件,后续系统升级会冲突,优先用 /usr/local 或 /opt
  • make install 后程序报找不到库:新前缀的 lib 要写进 /etc/ld.so.conf.d/ 并执行 ldconfig
  • 重复编译安装不记录旧版本:升级前留好旧前缀目录或备份,出问题可直接切回

数据来源与参考

  • GNU autoconf 文档
  • 各发行版编译指南
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌