You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编译可在任意Linux发行版运行的Postgres 15二进制文件?

PostgreSQL 15跨Linux发行版通用编译方案

可以实现通用编译,核心是解决动态库依赖的版本差异问题,具体步骤如下:

1. 选择合适的编译基础环境

必须在CentOS 7这类旧版本发行版上编译——旧系统的glibc等核心库版本更低,编译出的二进制能兼容Ubuntu 16/22、CentOS 7等新老发行版,反之在新系统编译的二进制无法在老系统运行。

2. 修改编译配置,强制静态链接依赖库

默认编译会动态链接系统库,导致跨发行版时出现库缺失/版本不匹配(比如你遇到的libldap_r-2.4.so.2错误,就是Ubuntu 22的ldap库命名和CentOS 7不同)。修改configure命令,让PostgreSQL静态链接关键依赖:

cd /home/username/postgres-15/build_postgres
../configure \
  --prefix=/home/username/postgres-15/install \
  --enable-static \
  --disable-shared \
  --with-ldap=static \
  --with-openssl=static \
  --with-readline=static

参数说明:

  • --enable-static/--disable-shared:优先静态链接PostgreSQL自身库
  • --with-ldap=static/--with-openssl=static:静态链接ldap、openssl等第三方依赖,避免系统库版本差异
  • --with-readline=static:静态链接readline,解决不同发行版的readline库兼容问题

3. 编译并安装

make clean
make
make install

4. 打包部署

将/home/username/postgres-15/install目录打包,复制到任意Linux发行版即可直接运行——所有依赖已静态编译进二进制,无需依赖系统库。

如果静态链接某些库遇到问题,也可以退而求其次:

  • 保留动态链接,但将CentOS 7中必要的动态库(比如libldap_r-2.4.so.2、libssl.so.10)复制到install/lib目录
  • 运行前设置环境变量:export LD_LIBRARY_PATH=/path/to/postgres/install/lib:$LD_LIBRARY_PATH

内容的提问来源于stack exchange,提问作者evstratovkirill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 10:22:14