昨天在编译安装 PostgreSQL 9.3 Beta1 时报错,这个错困扰了好长时间,记录下。
环境信息
OS: CentOS release 5.4 (Final) PostgreSQL: 9.3Beta1
备注:开始一直怀疑与平台或 PG 版本有关,后来发现不是这样。
安装过程
configure
1
./configure --prefix=/opt/pgsql9 .3beta1 --with-pgport=1925 --with-wal-segsize=16 --with-wal-blocksize=64 --with-perl --with-python --with-openssl --with-pam --with-ldap --with-libxml --with-libxslt --enable-thread-safety
备注: configure 通过,无报错。
gmake
备注:这个命令抛出以下错误信息:只显示最后一段。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.... gmake[4 ]: Leaving directory `/opt/soft_bak/postgresql-9.3 beta1/src/common' gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after -statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv pg_dump.o common.o pg_dump_sort.o keywords.o kwlookup.o pg_backup_archiver.o pg_backup_db.o pg_backup_custom.o pg_backup_null.o pg_backup_tar.o pg_backup_directory.o pg_backup_utils.o parallel.o compress_io.o dumputils.o -L../../../src/port -lpgport -L../../../src/common -lpgcommon -L../../../src/interfaces/libpq -lpq -L../../../src/port -L../../../src/common -L/usr/lib -Wl,-rpath,'/opt/pgsql9.3 beta1/lib', pg_backup_archiver.o: In function `SetOutput': pg_backup_archiver.c:(.text +0 x4117): undefined reference to `gzopen64' compress_io.o: In function `cfopen': compress_io.c:(.text +0 x202): undefined reference to `gzopen64' collect2: ld returned 1 exit status gmake[3 ]: * [pg_dump] Error 1 gmake[3 ]: Leaving directory `/opt/soft_bak/postgresql-9.3 beta1/src/bin/pg_dump' gmake[2 ]: * [all -pg_dump-recurse] Error 2 gmake[2 ]: Leaving directory `/opt/soft_bak/postgresql-9.3 beta1/src/bin' gmake[1 ]: * [all -bin-recurse] Error 2 gmake[1 ]: Leaving directory `/opt/soft_bak/postgresql-9.3 beta1/src' gmake: * [world-src-recurse] Error 2
备注:网上查了些资料,说是要安装 zlib 和 zlib-devel 包, 当然也有方法规避这个问题,比如configure
时加上 “–without-zlib”,这个功能是需要的,故不建议这么做,接着检查以下。
检查是否安装 zlib 和 zlib-devel
1 2 3 4 5 6
[root@server1 ~]# rpm -qa | grep zlib zlib-devel-1.2 .3 -7. el5 jzlib-demo-1.0 .7 -4 jpp.1 jzlib-javadoc-1.0 .7 -4 jpp.1 jzlib-1.0 .7 -4 jpp.1 zlib-1.2 .3 -7. el5
备注:说明已安装 1.2.3 版本的 zlib,后来咨询了系统平台比较熟悉的同事,终于发现了问题。问题是:系统安装了多个版本的 zlib。
查看 1.2.7 版本的 zlib
1 2 3 4 5 6 7 8 9
[root@server1 ~]# ll /usr/local/include /zlib.h -rw-r--r-- 1 root root 86717 Nov 6 2012 /usr/ local/include/ zlib.h [root@mpchat-server1 ~]# [root@server1 ~]# head -n 5 /usr/local/include /zlib.h
查看 1.2.3 版本的 zlib
1 2 3 4 5 6 7 8
[root@server1 ~]# ll /usr/include /zlib.h -rw-r--r-- 1 root root 66188 Jul 17 2012 /usr/ include/zlib.h [root@server1 ~]# head -n 5 /usr/include /zlib.h
备注:可见系统安装了两个版本的 zlib,而且 1.2.7 版本通过 “rpm -qa “ 命令根本查不到,应该是源码安装的,并且 /usr/local 目录的优先级更高,所以在编译时默认找的的 1.2.7 版本的 zlib。故编译通不过。
解决方法
临时将 /usr/local/include/zlib.h 移动其它地方
1 [root@server1 ~]# mv /usr/local/include/zlib.h /root
2 cd /opt/soft_bak/postgresql-9.3beta1 && make clean
3 configure
4 gmake world ( 这时终于不报这个错了。)
5 把文件 /root/zlib.h 移回去
[root@server1 ~]# mv /root/zlib.h /usr/local/include/
6 接下来安装软件,建库。。。。
参考
原创文章,作者:6024010,如若转载,请注明出处:https://blog.ytso.com/237962.html