缺的是含头文件和pkgconfig的-dev/-devel开发包,如Ubuntu需装zlib1g-dev、libssl-dev,RHEL系需装zlib-devel、openssl-devel;仅装运行时库(zlib1g、openssl)无效。

configure 报错“please install xxx”到底缺什么
不是缺运行时库,是缺 -devel 包。比如报错 configure: error: please install zlib,Ubuntu 上要装 zlib1g-dev,RHEL/CentOS/Fedora 上必须装 zlib-devel,只装 zlib 或 zlib1g 没用——因为 configure 需要头文件(zlib.h)和静态链接信息,这些只在开发包里。
常见对应关系:
-
openssl→libssl-dev(Debian/Ubuntu)或openssl-devel(RHEL 系) -
pcre→libpcre3-dev或pcre-devel -
readline→libreadline-dev或readline-devel
查错最直接的方式是翻 config.log 文件,搜 error 或 not found,它比终端报错更具体。
./configure --prefix 为什么不能随便改
--prefix 决定所有安装路径的根目录,影响后续使用和维护。设成 /usr/local/myapp 看似干净,但二进制可能被 PATH 忽略,库文件不会自动进 ldconfig 路径,配置文件也不在 /etc 下。
更实际的取舍:
- 想快速验证功能?用默认
--prefix=/usr/local,然后手动加/usr/local/bin到 PATH - 要隔离部署?用
--prefix=/opt/myapp-1.2.0,但必须自己配LD_LIBRARY_PATH或写/etc/ld.so.conf.d/myapp.conf并运行sudo ldconfig - 别设成
/home/user/app:普通用户没权限写系统级配置,且其他用户无法调用
注意:--prefix 不影响编译过程,只控制 make install 时文件往哪放。
make 编译慢,能加速但别乱加 -j
make -j 启用并行编译,但 -j 后不跟数字风险很大。比如在 4 核机器上跑 make -j(无参数),会启动无限多进程,内存爆满、系统假死很常见。
安全做法:
- 查 CPU 核心数:
nproc - 保守起见用
make -j$(nproc),或更稳一点make -j$(( $(nproc) - 1 )) - 如果编译中途卡住或 OOM,立刻
Ctrl+C,删掉Makefile和中间对象文件(find . -name "*.o" -delete),再重来
有些项目(如旧版 nginx)不完全支持并行,make -j4 反而报错,这时就老实用 make 单线程。
make install 后程序找不到命令或报 missing library
make install 只复制文件,不注册环境。常见现象:
- 运行时报
command not found:检查PATH是否包含bin/子目录,比如装到/opt/redis,就得确保/opt/redis/bin在 PATH 里 - 运行时报
error while loading shared libraries:说明动态库路径没生效,ldd /path/to/binary看哪些库显示not found,然后把对应.so所在目录加进/etc/ld.so.conf.d/并执行sudo ldconfig - 服务启不来(如 systemd 报
Failed to locate executable):确认ExecStart=路径写的是绝对路径,且该路径下文件确实存在、有执行权限
卸载没法一键回滚——你得记住 --prefix 路径,然后手动删整个目录,再清理可能残留的配置或 service 文件。
整个流程里最容易被跳过的其实是读 INSTALL 和 README。作者写的构建说明往往比网上教程准,尤其对非 autoconf 项目(比如用 CMake 的)——它们根本不用 ./configure,硬套三步会直接失败。











