ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Linux源码编译安装教程:configure、make、make install全流程

Linux源码编译安装教程:configure、make、make install全流程 仓库里没有的版本号、需要打开某个特殊编译选项、官方只给了 tar.gz 源码包——碰到这些情况就得走源码编译这条路。./configure、make、make install三步是主角但每一步到底在干嘛、缺依赖报什么错、装完怎么卸载这篇按真实流程走一遍。一、什么时候才需要源码编译包管理器能装就尽量别编译。源码编译适合这几种情况仓库版本太旧软件要新版本需要打开仓库包没编进去的功能官方根本没出 .deb/.rpm只给源码想把软件装到自定义路径。代价是编译完的软件包管理器不认识以后升级、卸载都得手动来。二、整体流程一张图下载源码包 → 解压 → ./configure → make → make install 校验依赖 生成Makefile 编译 安装到系统每一步都可能失败定位问题时顺着这个顺序往上找。三、第一步下载并解压以一个典型的 autoconf 项目为例wgethttps://example.com/app-1.2.0.tar.gztar-xzfapp-1.2.0.tar.gzcdapp-1.2.0解压后先看一眼 README 和 INSTALL 文件作者写的编译说明往往比网上教程准。四、第二步./configure它在干嘛configure是一个 shell 脚本跑一遍它会自动探测编译器在哪、系统有没有 zlib、头文件路径对不对最后根据探测结果生成Makefile。常用选项选项作用--prefix路径指定安装位置默认/usr/local--enable-功能打开某个功能--disable-功能关掉某个功能--with-库路径指定依赖库位置--help列出所有可用选项示例与预期输出./configure--prefix/usr/local/app --enable-feature-xxx预期输出节选checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gcc... gcc checking whether the C compiler works... yes checking for zlib.h... yes checking for library containing deflate... -lz configure: creating ./config.status config.status: creating Makefile跑到一半报configure: error: please install xxx就是缺依赖。Ubuntu 上装编译依赖通常是sudo apt install build-essentialRHEL 系是sudo dnf groupinstall Development Tools。五、第三步make它在干嘛make读 Makefile按依赖关系调用 gcc 把 .c 文件编成 .o再链接成可执行文件。这一步不碰系统目录失败了随便重来不影响现有系统。常用选项选项作用make -j$(nproc)多核并行编译速度快很多make clean清空上次编译产物重新编示例与预期输出make-j$(nproc)预期输出节选CC src/main.o CC src/utils.o CC src/config.o LD app报gcc: command not found就是没装编译器报某个.h: No such file or directory就是缺开发头文件Ubuntu 上对应的包通常叫libxxx-devRHEL 上叫xxx-devel。六、第四步make install它在干嘛把编译好的可执行文件、库、配置文件拷到--prefix指定的目录。这一步要写系统目录所以要 sudo。示例与预期输出sudomakeinstall预期输出节选install -m 755 app /usr/local/app/bin/app install -m 644 conf/app.conf /usr/local/app/etc/ installing man page to /usr/local/app/share/man/man1装完后可执行文件在/usr/local/app/bin/。如果敲app提示 command not found是因为/usr/local/app/bin不在PATH里要么用完整路径要么把它加进/etc/profile.d/。七、怎么卸载和清理make install不会把文件登记进 dpkg/rpm 数据库所以 apt、dnf 找不到它。卸载方式看项目回到源码目录跑sudo make uninstall——多数项目支持不支持的就手动删--prefix目录。这也是为什么前面强烈建议用--prefix指定独立路径别用默认/usr否则删的时候会和系统文件混在一起。源码目录本身在编译完可以整个删掉不影响已经 install 的文件。八、知识扩展为什么编译这么吃环境很多人第一次编译卡在缺这个头文件、缺那个库上原因是开发环境和运行环境是分开的。系统里装了zlib运行库.so不代表装了zlib开发包头文件.h和链接文件。运行库只够让现成软件跑起来编译新软件必须有开发包。Ubuntu 上命名规则是libxxx-dev比如zlib1g-devRHEL 系是xxx-devel比如zlib-devel。报错信息里出现zlib.h: No such file or directory照着这个规则找包名基本不会错。另外make -j$(nproc)里的nproc是当前 CPU 核数并行编译能把编译时间从半小时压到几分钟。小机器上别写死-j84 核机器用-j$(nproc)才是通用写法。
返回列表