1

我正在运行 64 位 Solaris 10,并且我在 /usr/local 中安装了自编译的 Perl 5.10 和 Postgresql 8.4.1,均为 64 位。Solaris 附带安装在 /usr 中的 32 位 Postgresql 8.1.4,但它没有运行。当我尝试安装 DBD::Pg 时,它遇到了一个问题,因为它找到的 libpq.so 是 /usr/lib 中的 32 位文件,而不是 /usr/local/pgsql/lib 中的 64 位文件。

# /usr/local/bin/cpanp -i DBD::Pg
安装 DBD::Pg (2.15.1)
...
ld:致命:文件/usr/lib/libpq.so:错误的ELF类:ELFCLASS32

我的第一个想法是删除捆绑的 Postgres,但我已经阅读了反对的建议。如果我从 32 位 Perl 重新开始,我确信一切都会正常工作,但我更愿意坚持我所拥有的。

我注意到在 CPAN 输出中,makefile 在链接之前设置了 LD_RUN_PATH=/usr/lib。这似乎应该改变,但我不知道如何改变它(因为它都是由 CPAN 自动化的),而且我不知道这种改变可能会产生什么其他副作用。看起来正确的目录 /usr/local/pgsql/lib 根本不在路径上,所以即使不隐藏 32 位版本,也许只是让它可见就可以解决问题,但我不知道如何做到这一点,要么。

如何在我拥有的环境中编译此模块,或者如何更改我的环境以使模块按原样编译?

4

1 回答 1

3

来自http://cpansearch.perl.org/src/TURNSTEP/DBD-Pg-2.15.1/Makefile.PL

简单来说:

默认情况下,Makefile.PL 使用 App::Info 来查找 PostgreSQL 库的位置并包含目录。但是,如果您想自己控制它,请定义环境变量 POSTGRES_INCLUDE 和 POSTGRES_LIB,或者只定义 POSTGRES_HOME。请注意,如果您已使用 SSL 支持编译 PostgreSQL,则必须定义 POSTGRES_LIB 环境变量并向其添加“-lssl”,如下所示:

export POSTGRES_LIB="/usr/local/pgsql/lib -lssl"
于 2009-12-03T00:34:24.747 回答