0

0

Linux 编译安装源码软件实践

舞夢輝影

舞夢輝影

发布时间:2026-02-21 17:23:21

|

818人浏览过

|

来源于php中文网

原创

configure报错主因是构建工具链缺失,需按发行版安装build-essential或development tools及-devel头文件包;编译链接失败多因库路径未识别或缺少静态库;安装后需更新path和ld.so缓存;推荐使用--prefix=$home/local避免系统污染。

linux 编译安装源码软件实践

configure 时提示 command not found 或找不到依赖库

不是 configure 脚本坏了,而是它依赖的构建工具链没装全。Linux 发行版默认不带编译环境,./configure 本质是 shell 脚本,会调用 gccmakepkg-config 等命令,缺一个就报错。

  • Debian/Ubuntu 上先跑:sudo apt install build-essential pkg-config autoconf automake libtool
  • RHEL/CentOS/Fedora 上对应是:sudo dnf groupinstall "Development Tools" + sudo dnf install pkgconfig autoconf automake libtool
  • 常见“找不到 libssl”类错误,别急着搜源码包,先装开发头文件:比如 libssl-dev(Debian)或 openssl-devel(RHEL)
  • pkg-config 特别关键——很多 configure 靠它查库路径和版本,装了库但没装 -devel 包,pkg-config --modversion xxx 就会失败,configure 也就跟着哑火

make 编译卡住或报 undefined reference

这通常不是代码问题,而是链接阶段出错:目标文件生成了,但最终拼成可执行文件时,发现某个函数符号找不到定义。根源常在 configure 阶段没正确识别依赖库,或者手动加了 --with-xxx 却没配对提供 .so.a 文件。

  • 检查 configure 输出末尾有没有 checking for xxx... no,尤其是你明确需要的功能项
  • 运行 make V=1(不是 make verbose)看实际调用的 gcc 命令,确认 -lxxx-L/path/to/lib 是否出现、路径是否真实存在
  • 如果自己编译过依赖(比如先装了新版 OpenSSL),确保 LD_LIBRARY_PATH 不影响 configure 检测(configure 是运行时检测,不是链接时),但编译后运行可能需要它
  • 静态链接时注意:--enable-static 可能要求所有依赖都提供静态库(.a),而多数发行版默认只装动态库

make install 后命令找不到或报 shared library not found

make install 默认把二进制丢进 /usr/local/bin,库文件进 /usr/local/lib,但系统默认不查这两个路径。这不是安装失败,是 PATH 和 ld.so 缓存没更新。

B2S商城系统
B2S商城系统

B2S商城系统B2S商城系统是由佳弗网络工作室凭借专业的技术、丰富的电子商务经验在第一时刻为最流行的分享式购物(或体验式购物)推出的开源程序。开发采用PHP+MYSQL数据库,独立编译模板、代码简洁、自由修改、安全高效、数据缓存等技术的应用,使其能在大浏览量的环境下快速稳定运行,切实节约网站成本,提升形象。注意:如果安装后页面打开出现找不到数据库等错误,请删除admin下的runtime文件夹和a

下载
  • 临时解决:运行前加 export PATH="/usr/local/bin:$PATH";运行时报库缺失,加 export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
  • 永久生效更稳妥:把 /usr/local/bin 加进 /etc/environment 或用户 shell 的 ~/.profile;对库路径,新建 /etc/ld.so.conf.d/local.conf,写入 /usr/local/lib,再跑 sudo ldconfig
  • 别直接 make install 覆盖系统关键工具(比如用源码装的 bashcoreutils),容易让系统无法登录——优先用 --prefix=$HOME/local 装到用户目录下测试
  • strip 命令可减小二进制体积,但调试时别开,否则 gdb 无法读符号;有些软件的 Makefileinstall 里自带 strip,留意 configure 选项如 --disable-stripping

想跳过 configure / make 流程直接运行源码

绝大多数 C/C++ 源码软件没有“免编译运行”这回事。所谓“源码包”不是脚本,是待编译的中间态,连 ./configure 都是自动生成的(由 autogen.shautoreconf 产生)。真想绕过,只有两种现实路径:

  • 确认项目是否支持 Meson/Ninja:有些新项目已弃用 autotools,改用 meson setup builddir && ninja -C builddir,速度更快,报错更直观
  • 找 prebuilt binary:官网有时提供 .tar.xz 二进制包(含 bin/lib/),解压即用,但得核对 ldd ./binary 输出,确认 glibc 版本兼容(比如 CentOS 7 的 glibc 2.17 跑不了为 Ubuntu 22.04 编译的二进制)
  • 容器化是更现代的解法:Docker 官方镜像或 linuxserver.io 提供的镜像常预装好编译环境,git clone && make 在容器里跑,干净又隔离

configure 的缓存逻辑、aclocal 的宏路径、libtool 的 .la 文件处理……这些细节不会报错,但会让第二次编译行为突变。最省心的做法,每次从干净源码开始,用独立 build/ 目录,而不是在源码根目录下直接 ./configure

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

5694

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

3226

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

1313

2025.12.25

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

893

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

574

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

273

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

566

2024.04.09

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

530

2024.04.09

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

796

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.5万人学习

Git 教程
Git 教程

共21课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号