PostgreSQL 编译安装报错:”Undefined reference to gzopen64″

昨天在编译安装 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
gmake world

备注:这个命令抛出以下错误信息:只显示最后一段。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
....
gmake[4]: Leaving directory `/opt/soft_bak/postgresql-9.3beta1/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.3beta1/lib',--enable-new-dtags -lpgport -lpgcommon -lxslt -lxml2 -lpam -lssl -lcrypto -lz -lreadline -ltermcap -lcrypt -ldl -lm -o pg_dump
pg_backup_archiver.o: In function `SetOutput':
pg_backup_archiver.c:(.text+0x4117): undefined reference to `gzopen64'
compress_io.o: In function `cfopen':
compress_io.c:(.text+0x202): 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.3beta1/src/bin/pg_dump'
gmake[2]: * [all-pg_dump-recurse] Error 2
gmake[2]: Leaving directory `/opt/soft_bak/postgresql-9.3beta1/src/bin'
gmake[1]: * [all-bin-recurse] Error 2
gmake[1]: Leaving directory `/opt/soft_bak/postgresql-9.3beta1/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-4jpp.1
jzlib-javadoc-1.0.7-4jpp.1
jzlib-1.0.7-4jpp.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
/* zlib.h -- interface of the 'zlib' general purpose compression library
version 1.2.7, May 2nd, 2012

Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler

查看 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.h -- interface of the 'zlib' general purpose compression library
version 1.2.3, July 18th, 2005

Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler

备注:可见系统安装了两个版本的 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

(0)
上一篇 2022年1月29日
下一篇 2022年1月29日

相关推荐

发表回复

登录后才能评论