如何编译安装源码包 configure/make编译流程详解

编译安装源码包的步骤为:1. 从官网等可靠来源下载.tar.gz或.tar.bz2格式的源码包;2. 使用tar命令解压源码包,如tar -zxvf package.tar.gz或tar -jxvf package.tar.bz2;3. 进入解压后的源码目录,使用cd命令切换路径;4. 运行./configure脚本检查系统环境并生成makefile文件,可通过–prefix指定安装路径,若缺少依赖则需根据提示安装对应开发库;5. 执行make命令根据makefile编译源码,可使用make -j n利用多核加速编译;6. 执行sudo make install将编译好的文件安装到指定目录,此步通常需要root权限;7. 若安装路径非标准目录,需修改~/.bashrc或~/.zshrc文件,添加path和ld_library_path环境变量,并执行source命令使其生效。

如何编译安装源码包 configure/make编译流程详解

简单来说,编译安装源码包就是把一堆人类能看懂的代码,变成机器能执行的程序。Configure负责配置编译环境,Make根据配置好的环境进行编译,最后Make install将编译好的程序安装到指定位置。这就是一个化腐朽为神奇的过程。

解决方案

编译安装源码包通常遵循以下步骤:

获取源码包: 从官方网站或者其他可靠来源下载源码包,通常是

.tar.gz

.tar.bz2

格式的压缩文件。

解压源码包: 使用

tar

命令解压源码包。例如:

tar -zxvf package.tar.gz  # 解压.tar.gz文件tar -jxvf package.tar.bz2  # 解压.tar.bz2文件

进入源码目录: 使用

cd

命令进入解压后的源码目录。

运行

configure

脚本: 这是编译安装的关键步骤。

configure

脚本会检查你的系统环境,比如是否安装了必要的依赖库,然后生成

Makefile

文件。

./configure --prefix=/usr/local/package  # 指定安装目录,默认是/usr/local

--prefix

选项指定了程序的安装目录,如果不指定,默认安装到

/usr/local

目录下。还可以根据需要添加其他选项,例如

--enable-feature

--disable-feature

来启用或禁用某些功能。

如果缺少依赖,

configure

会报错,你需要根据错误提示安装相应的依赖库。在Debian/Ubuntu系统上,可以使用

apt-get install

命令安装,在CentOS/RHEL系统上,可以使用

yum install

命令安装。

运行

make

命令:

make

命令会根据

Makefile

文件中的指令,将源码编译成可执行文件。

make

如果你的系统是多核处理器,可以使用

make -j 

来并行编译,加快编译速度。例如,如果你的系统有8个核心,可以使用

make -j 8

编译过程中可能会出现错误,你需要根据错误提示修改源码或者安装缺失的依赖库。

运行

make install

命令:

make install

命令会将编译好的可执行文件、库文件、配置文件等安装到指定目录。

sudo make install  # 需要root权限

通常需要

root

权限才能执行

make install

命令,因为系统目录通常需要

root

权限才能写入。

配置环境变量: 如果程序安装到了非标准目录,你需要将程序的安装目录添加到环境变量中,才能在命令行中直接运行程序。

修改

~/.bashrc

~/.zshrc

文件,添加以下内容:

Stable Diffusion 2.1 Demo Stable Diffusion 2.1 Demo

最新体验版 Stable Diffusion 2.1

Stable Diffusion 2.1 Demo 101 查看详情 Stable Diffusion 2.1 Demo

export PATH=$PATH:/usr/local/package/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/package/lib

然后执行

source ~/.bashrc

source ~/.zshrc

命令,使环境变量生效。

为什么

configure

脚本很重要?它做了哪些事情?

configure

脚本就像一个项目经理,负责统筹整个编译过程。它主要做了以下几件事情:

检查系统环境: 检查编译器、库文件等依赖是否安装,版本是否符合要求。生成

Makefile

根据系统环境和用户指定的选项,生成

Makefile

文件。

Makefile

文件包含了编译的指令,

make

命令会根据

Makefile

文件中的指令进行编译。创建目录: 创建必要的目录,例如安装目录、临时目录等。执行其他配置任务: 根据具体的项目,执行其他配置任务,例如生成配置文件、设置编译选项等。

configure

脚本的目的是为了让编译过程更加自动化和可移植。它可以根据不同的系统环境生成不同的

Makefile

文件,从而保证程序可以在不同的系统上编译和运行。

遇到

configure

报错,常见的错误有哪些?如何解决?

configure

报错是编译安装过程中常见的问题。常见的错误包括:

缺少依赖库: 错误提示通常会告诉你缺少哪个库,例如

configure: error: *** libpng not found

解决方法是安装相应的库。在Debian/Ubuntu系统上,可以使用

apt-get install libpng-dev

命令安装,在CentOS/RHEL系统上,可以使用

yum install libpng-devel

命令安装。注意,需要安装的是

-dev

-devel

后缀的开发包,而不是运行时库。编译器版本不符合要求: 错误提示通常会告诉你编译器版本过低或过高。解决方法是升级或降级编译器。权限不足: 错误提示通常会告诉你没有权限创建目录或写入文件。解决方法是使用

sudo

命令运行

configure

脚本,或者修改目录的权限。其他错误: 错误提示可能是一些其他的错误,例如配置文件错误、脚本错误等。解决方法是仔细阅读错误提示,查找相关的资料,或者向社区寻求帮助。

解决

configure

报错的关键是仔细阅读错误提示,理解错误的原因,然后根据错误的原因采取相应的解决方法。

make

make install

区别是什么?

make

命令负责将源码编译成可执行文件,而

make install

命令负责将编译好的可执行文件、库文件、配置文件等安装到指定目录。

make

命令只是编译源码,不会修改系统文件。而

make install

命令会修改系统文件,例如将可执行文件复制到

/usr/local/bin

目录下,将库文件复制到

/usr/local/lib

目录下,将配置文件复制到

/usr/local/etc

目录下。因此,通常需要

root

权限才能执行

make install

命令。

可以把

make

看作是生产零件,

make install

看作是组装和安装。

如何卸载通过源码编译安装的软件?

卸载通过源码编译安装的软件,通常没有像包管理器那样方便的卸载命令。一般来说,有以下几种方法:

使用

make uninstall

命令: 有些源码包提供了

make uninstall

命令,可以直接卸载软件。在源码目录下执行

sudo make uninstall

命令即可。但是,并不是所有的源码包都提供了

make uninstall

命令,如果没有,就需要手动卸载。

手动删除文件: 手动删除安装目录下的文件。首先,你需要知道软件安装到了哪些目录。如果你在

configure

的时候指定了

--prefix

选项,那么软件就安装到了指定的目录下。如果没有指定,默认安装到

/usr/local

目录下。然后,你需要手动删除这些目录下的文件。例如:

sudo rm -rf /usr/local/package

这种方法比较麻烦,而且容易遗漏文件。

记录安装文件: 在安装之前,使用

make install

命令的

-n

选项,可以模拟安装过程,并输出安装的文件列表。然后,将这些文件列表保存下来,卸载的时候,就可以根据文件列表删除文件。例如:

make install -n > install.log

然后,根据

install.log

文件中的文件列表删除文件。

这种方法比较可靠,但是需要提前做好准备。

卸载通过源码编译安装的软件需要小心谨慎,避免误删系统文件。建议在卸载之前备份相关文件。

以上就是如何编译安装源码包 configure/make编译流程详解的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/937394.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月29日 16:03:57
下一篇 2025年11月29日 16:10:51

相关推荐

  • Pboot插件缓存机制的详细解析_Pboot插件缓存清理的命令操作

    插件功能异常或页面显示陈旧内容可能是缓存未更新所致。PbootCMS通过/runtime/cache/与/runtime/temp/目录缓存插件配置、模板解析结果和数据库查询数据,提升性能但影响调试。解决方法包括:1. 手动删除上述目录下所有文件;2. 后台进入“系统工具”-“缓存管理”,勾选插件、…

    2025年12月6日 软件教程
    000
  • 哔哩哔哩的视频卡在加载中怎么办_哔哩哔哩视频加载卡顿解决方法

    视频加载停滞可先切换网络或重启路由器,再清除B站缓存并重装应用,接着调低播放清晰度并关闭自动选分辨率,随后更改播放策略为AVC编码,最后关闭硬件加速功能以恢复播放。 如果您尝试播放哔哩哔哩的视频,但进度条停滞在加载状态,无法继续播放,这通常是由于网络、应用缓存或播放设置等因素导致。以下是解决此问题的…

    2025年12月6日 软件教程
    000
  • REDMI K90系列正式发布,售价2599元起!

    10月23日,redmi k90系列正式亮相,推出redmi k90与redmi k90 pro max两款新机。其中,redmi k90搭载骁龙8至尊版处理器、7100mah大电池及100w有线快充等多项旗舰配置,起售价为2599元,官方称其为k系列迄今为止最完整的标准版本。 图源:REDMI红米…

    2025年12月6日 行业动态
    000
  • Linux中如何安装Nginx服务_Linux安装Nginx服务的完整指南

    首先更新系统软件包,然后通过对应包管理器安装Nginx,启动并启用服务,开放防火墙端口,最后验证欢迎页显示以确认安装成功。 在Linux系统中安装Nginx服务是搭建Web服务器的第一步。Nginx以高性能、低资源消耗和良好的并发处理能力著称,广泛用于静态内容服务、反向代理和负载均衡。以下是在主流L…

    2025年12月6日 运维
    000
  • Linux journalctl与systemctl status结合分析

    先看 systemctl status 确认服务状态,再用 journalctl 查看详细日志。例如 nginx 启动失败时,systemctl status 显示 Active: failed,journalctl -u nginx 发现端口 80 被占用,结合两者可快速定位问题根源。 在 Lin…

    2025年12月6日 运维
    000
  • Linux文件系统rsync命令详解

    rsync通过增量同步高效复制文件,支持本地及远程同步,常用选项包括-a、-v、-z和–delete,结合SSH可安全传输数据,配合cron可实现定时备份。 rsync 是 Linux 系统中一个非常强大且常用的文件同步工具,能够高效地在本地或远程系统之间复制和同步文件与目录。它以“增量…

    2025年12月6日 运维
    000
  • RTX 5090性能怪兽!雷蛇灵刃18 2025游戏本图赏

    10月25日,雷蛇正式推出全新灵刃18 2025款旗舰级游戏笔记本,首发搭载nvidia rtx 50系列显卡,起售价为25999元。 目前该机型已抵达评测室,以下为实机图赏。 新款灵刃18配备一块18英寸双模屏幕,支持UHD+ 240Hz与FHD+ 440Hz两种显示模式,响应时间最快可达3ms。…

    2025年12月6日 行业动态
    000
  • 如何在mysql中分析索引未命中问题

    答案是通过EXPLAIN分析执行计划,检查索引使用情况,优化WHERE条件写法,避免索引失效,结合慢查询日志定位问题SQL,并根据查询模式合理设计索引。 当 MySQL 查询性能下降,很可能是索引未命中导致的。要分析这类问题,核心是理解查询执行计划、检查索引设计是否合理,并结合实际数据访问模式进行优…

    2025年12月6日 数据库
    000
  • 如何在Linux中处理磁盘满的问题?

    先使用df -h和du命令定位占用空间的目录或文件,再清理日志、缓存等可删除内容,并通过定期任务和监控预防问题复发。 当Linux系统提示磁盘空间不足时,关键是要快速定位问题源头并释放空间。以下是实用的排查和处理步骤。 检查磁盘使用情况 使用df命令查看各分区的使用情况: df -h:以易读方式显示…

    2025年12月6日 运维
    000
  • VSCode插件:GitLens使用详解

    GitLens是VSCode中强大的Git增强插件,提供行级代码追踪、提交历史浏览、版本对比、跨文件导航及与GitHub等平台集成;通过启用Current Line Blame和In-Line Blame,可实时查看每行代码的作者与修改时间;支持按分支、作者过滤提交记录,比较差异,并利用Go Bac…

    2025年12月6日 开发工具
    000
  • 小米14 Ultra拍照夜景暗 小米14 Ultra影像参数优化

    小米14 Ultra夜景偏暗主因是参数未优化,解决方法包括启用夜景模式、调整专业参数及改善拍摄习惯。首先切换至夜景模式,稳定手机并延长曝光,配合EV补偿提亮画面;其次使用专业模式,设置快门速度1/4秒至数秒、ISO控制在100-400、手动对焦避免虚焦,并根据场景选择矩阵或点测光;最后开启自动夜景提…

    2025年12月6日 手机教程
    000
  • mysql如何备份存储过程和函数

    最直接且推荐的方式是使用mysqldump工具并添加–routines参数,可完整导出存储过程和函数;若需跨版本迁移,应结合–triggers、处理DEFINER用户、验证SQL_MODE,并在测试环境充分验证恢复与兼容性。 MySQL备份存储过程和函数,最直接且推荐的方式是…

    2025年12月6日 数据库
    000
  • 在Java中如何初始化静态代码块

    静态代码块在类加载时执行一次,用于初始化静态资源;语法为static{},多个按出现顺序执行;在创建对象、调用静态方法等主动使用类时触发,仅执行一次,与每次实例化都执行的实例代码块和构造函数不同。 在Java中,静态代码块用于在类加载时执行一次性的初始化操作。它会在类第一次被JVM加载时自动执行,且…

    2025年12月6日 java
    000
  • vivo浏览器和系统自带的浏览器有什么区别_vivo浏览器与原生浏览器对比分析

    vivo浏览器即系统自带浏览器,由vivo官方开发并预装于Funtouch OS或OriginOS中,不同机型因版本差异可能导致界面与功能不同,用户亦可自行安装第三方浏览器并设为默认。 如果您在使用vivo手机时注意到浏览器应用存在不同界面或功能差异,这可能是因为系统预装了多个版本的浏览器或用户自行…

    2025年12月6日 电脑教程
    000
  • AI推文助手如何制作品牌宣言 AI推文助手的品牌价值表达指南

    明确品牌核心定位,梳理初衷、受众与独特价值;构建情感共鸣语句,使用积极语言与场景化描述;优化AI提示词,提供背景与风格指令;多轮迭代测试,收集反馈并调整发布。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 如果您希望借助AI推文助手清晰传达…

    2025年12月6日 科技
    000
  • LINUX怎么查看系统所有用户组_Linux系统所有用户组查看方法

    首先使用getent group命令获取系统中所有用户组的完整列表,该命令从/etc/group文件和网络信息源读取数据,结果全面;接着可通过cat /etc/group直接查看本地用户组配置文件内容,适合快速检查本地组信息;最后利用bash内置命令compgen -g列出所有用户组名称,便于脚本处…

    2025年12月6日 系统教程
    000
  • Via浏览器为什么无法上传图片或文件_Via浏览器上传文件失败的原因及解决方法

    Via浏览器上传失败可因权限、设置或兼容性问题导致,需检查存储权限、启用JavaScript、更换User-Agent、使用系统文件选择器或清除缓存解决。 如果您在使用Via浏览器尝试上传图片或文件时遇到失败提示,可能是由于权限设置、浏览器配置或网页兼容性问题导致。此类问题通常可以通过调整设置或更换…

    2025年12月6日 电脑教程
    000
  • 如何在mysql中安装mysql客户端命令行

    答案是安装MySQL客户端的方法因操作系统而异。首先通过mysql –version确认是否已安装,若未安装,则在Ubuntu/Debian系统使用sudo apt install mysql-client,在CentOS/RHEL/Fedora系统使用sudo yum或dnf inst…

    2025年12月6日 数据库
    000
  • 如何在Linux中管理磁盘阵列(RAID)?

    使用mdadm管理Linux软件RAID,需先安装工具并创建RAID阵列(如RAID 1/5/10),通过mdadm –detail /dev/md0查看状态,将配置写入/etc/mdadm/mdadm.conf并更新initramfs以实现开机自动装配,支持在线更换故障磁盘并通过&#8…

    2025年12月6日 运维
    000
  • Via浏览器为什么打开淘宝链接会直接跳转到APP_Via浏览器防止淘宝链接跳转APP的方法

    关闭Via浏览器外部跳转权限可解决淘宝链接自动打开APP问题。依次进入设置→高级设置→链接处理,关闭“允许外部应用打开链接”选项,再尝试在浏览器内打开链接。 如果您在使用Via浏览器访问淘宝链接时,页面自动跳转至手机上已安装的淘宝APP,这通常是由于浏览器默认启用了外部应用跳转功能。以下是解决此问题…

    2025年12月6日 电脑教程
    000

发表回复

登录后才能评论
关注微信