我正在运行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位。< / p>
# /usr/local/bin/cpanp -i DBD::Pg Installing DBD::Pg (2.15.1) ... ld: fatal: file /usr/lib/libpq.so: wrong ELF class: ELFCLASS32
我的第一个想法是删除捆绑的Postgres,但我读过advice against that。我确信如果我重新开始使用32位Perl,一切都会有效,但我更愿意坚持我所拥有的。
我在CPAN输出中注意到makefile在链接之前设置了LD_RUN_PATH = / usr / lib。这似乎应该改变,但我不知道如何改变它(因为它全部由CPAN自动化),我不知道这种改变可能带来的其他副作用。看起来正确的目录/ usr / local / pgsql / lib根本不在路径上,所以即使不隐藏32位版本,也许只是使其可见即可解决问题,但我不知道怎么做,或者。
如何在我所拥有的环境中编译此模块,或者如何更改环境以便模块按原样编译?
答案 0 :(得分: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。请注意,如果你有 编译PostgreSQL并支持SSL,您必须定义POSTGRES_LIB 环境变量并向其添加“-lssl”,如下所示:
export POSTGRES_LIB="/usr/local/pgsql/lib -lssl"