【问题标题】:How can I compile 64-bit Postgres bindings for Perl on Solaris?如何在 Solaris 上为 Perl 编译 64 位 Postgres 绑定?
【发布时间】:2009-12-03 08:44:37
【问题描述】:

我正在运行 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,但我读过 advice against that。如果我从 32 位 Perl 重新开始,我确信一切都会正常工作,但我更愿意坚持我所拥有的。

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

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

【问题讨论】:

    标签: perl postgresql solaris cpan


    【解决方案1】:

    来自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"
    

    【讨论】:

    • 设置POSTGRES_HOME=/usr/local/pgsql 效果很好。无需删除 32 位 Postgres。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多