Hi,

I'm presently trying to build DBD::Pg on Solaris.  Perl, PostgreSQL and
friends are all installed under the prefix /opt/mycompany.  Now I can
build DBD::Pg just fine, but it fails to ever run.  This is because it
can't load the dependent shared library, libpq.so:

t/00basic...........NOK 2#     Failed test (t/00basic.t at line 11)
#     Tried to use 'DBD::Pg'.
#     Error:  Can't load
#     '/opt/mycompany/build/tmp/DBD-Pg/DBD-Pg-1.43/blib/arch/auto/DBD/Pg/Pg.so'
#     for module DBD::Pg: ld.so.1:
#     /opt/mycompany/bin/perl: fatal: libpq.so.4: open
#     failed: No such file or directory at
#     /opt/mycompany/lib/perl5/5.8.6/i86pc-solaris/DynaLoader.pm
#     line 230.

The problem is that the RPATH isn't being set correctly when it's
linked:

    % elfdump -d blib/arch/auto/DBD/Pg/Pg.so | grep PATH
           [4]  RUNPATH          0xfbc             /usr/sfw/lib
           [5]  RPATH            0xfbc             /usr/sfw/lib

The linker line looks like this:

    LD_RUN_PATH="/opt/mycompany/lib" gcc  -G Pg.o dbdimp.o quote.o types.o  \
        -o blib/arch/auto/DBD/Pg/Pg.so   -L/opt/mycompany/lib -lpq  

After much reading of manual pages, I note that ld(1) states that
LD_RUN_PATH is ignored if a -R flag is also specified.  And it turns out
that gcc is adding -R/usr/sfw/lib behind my back, when I run the linker
in verbose mode.  So LD_RUN_PATH is being ignored.

Is there any way to get MakeMaker to specify "-R" instead of
LD_RUN_PATH?

Alternatively, is there any way to specify OTHERLDFLAGS on the command
line of "perl Makefile.PL" in order to specify it myself in my build
script?

Thanks,
-Dom

P.S. I can show full build logs if needed, but I hoped that this would
be enough information.

Reply via email to