Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Linking CPAN modules to specific library

by ewedaa (Initiate)
on May 15, 2018 at 18:02 UTC ( #1214575=perlquestion: print w/replies, xml ) Need Help??
ewedaa has asked for the wisdom of the Perl Monks concerning the following question:

I'm having an interesting problem compiling a CPAN module (Net::SSLeay in particular). This particular module creates a binary library, SSLeay.so. For various reasons, I have to make/compile this module by hand.

The problem I am having is that the prior admins never "really" updated this particular system, and instead created a new directory /usr/local/ssl/ssl_version and installed new versions of ssl into that directory tree, and then passed the proper path to Apache and other programs when they compiled/installed the new versions. There are assorted "bad" versions of libssl scattered around the system being used by assorted programs (I'm working on cleaning those up too.)

I was able to edit the Makefile to get rid of /usr/lib/ and /usr/lib64. I even added the path I want into the Makefile as

LDDLFLAGS = -shared -O2 -L/usr/local/DPS/openssl/openssl-1.0.1m -L/lib + -L/usr -L/usr/local/lib -fstack-protector LDFLAGS = -fstack-protector -L/usr/local/DPS/openssl/openssl-1.0.1m - +L/usr -L/usr/local/lib EXTRALIBS = -L/usr/local/DPS/openssl/openssl-1.0.1m -L/usr -L/lib - +lssl -lcrypto -lz LDLOADLIBS = -L/usr/local/DPS/openssl/openssl-1.0.1m -L/usr -L/lib +-lssl -lcrypto -lz

But it still links to the bad version in /lib.

Any ideas on how to force it to force it to link to the version I want at /usr/local/DPS/openssl/openssl-1.0.1m

(I'm sure it's something stupid...)

Thanks!

Replies are listed 'Best First'.
Re: Linking CPAN modules to specific library
by Corion (Pope) on May 15, 2018 at 18:20 UTC

    Maybe listing the directories and the libraries immediately next to each other forces the linker to pick up the correct libssl.lib?

    LDDLFLAGS = -shared -O2 -L/usr/local/DPS/openssl/openssl-1.0.1m -L/lib + -L/usr -L/usr/local/lib -fstack-protector LDFLAGS = -fstack-protector -L/usr/local/DPS/openssl/openssl-1.0.1m - +L/usr -L/usr/local/lib EXTRALIBS = -L/usr/local/DPS/openssl/openssl-1.0.1m -lssl -lcrypto -L +/usr -L/lib -lz LDLOADLIBS = -L/usr/local/DPS/openssl/openssl-1.0.1m -lssl -lcrypto - +L/usr -L/lib -lz
Re: Linking CPAN modules to specific library
by Anonymous Monk on May 15, 2018 at 20:09 UTC

    There may be two separate problems. One, how the makefile flags and environment influence which libraries are linked against. See ld. Second, how the system finds libraries at runtime. See ld.so.

    • You could have a LD_LIBRARY_PATH environment variable set up in the working environment. But this can be fragile.
    • The /etc/ld.so.conf could be edited to contain your library directories.
    • Some old libtool file /usr/lib/*.la could influence your build environment, adding incorrect link options.
    • When building, you can pass linker flags through the compiler, such as -Wl,-rpath,/path/to/custom/libraries.

    In any case, it looks like you are dealing with a mess. How to best clean it up depends on what options you have available as an admin.

Re: Linking CPAN modules to specific library
by Anonymous Monk on May 16, 2018 at 01:14 UTC
    In the Linux world, libraries are listed in /etc/ld.so.conf and indexed by /sbin/ldconfig. Your predecessor might have fiddled with those directory-lists as well, doing non-standard things. If you change the conf file, you must re-run the indexer (as root).

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1214575]
Front-paged by Corion
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2018-05-21 06:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?