virtualdj has asked for the wisdom of the Perl Monks concerning the following question:
Hi, this question follows the solved one with node id 942437. On a Debian VM I've compiled the latest Perl and installed a lot of CPAN modules - including XML::Parser - into a custom folder /root/perl5.
Now I want to copy that folder on a QNAP NAS with embedded Linux (on a folder named /share/FTP/xmltv) and, following the advice of building Perl from sources by Eliya, it works quite perfectly.
There is only a problem: I'm forced to export LD_LIBRARY_PATH to run XML::Parser and that's not what I want because I want to use my spefic versions of the libraries (on /share/FTP/xmltv/lib) and not those on the QNAP (/usr/lib). Look at this code:
[/share/FTP/xmltv/bin] # export PERL5LIB=/share/FTP/xmltv/lib:/share/F +TP/xmltv/lib/site_perl [/share/FTP/xmltv/bin] # ./perl -e "use XML::Parser" [/share/FTP/xmltv/bin] # find .. -name Expat.so ../lib/site_perl/5.14.2/i686-linux/auto/XML/Parser/Expat/Expat.so [/share/FTP/xmltv/bin] # find .. -name Expat.so | xargs ldd linux-gate.so.1 => (0xb770b000) libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb76d4000) libc.so.6 => /lib/libc.so.6 (0xb75a0000) /lib/ld-linux.so.2 (0xb770c000) (this is NOT correct because of /usr/lib...) [/share/FTP/xmltv/bin] # export LD_LIBRARY_PATH=/share/FTP/xmltv/lib [/share/FTP/xmltv/bin] # find .. -name Expat.so | xargs ldd linux-gate.so.1 => (0xb7753000) libexpat.so.1 => /share/FTP/xmltv/lib/libexpat.so.1 (0xb771c00 +0) libc.so.6 => /lib/libc.so.6 (0xb75e2000) /lib/ld-linux.so.2 (0xb7754000) [/share/FTP/xmltv/bin] # ./perl -e "use XML::Parser" (this works but only because I've exported LD_LIBRARY_PATH) [/share/FTP/xmltv/bin] # find .. -name Expat.so | xargs readelf -d | g +rep RPATH 0x0000000f (RPATH) Library rpath: [/root/perl5/lib]
If you see the RPATH of the Expat.so library, which should be part of XML::Parser, it corresponds to the path of the Debian Virtual Machine where I've compiled the module.
I want to have a single root folder which can be placed anywhere (in this case /share/FTP/xmltv) on the NAS from which I can launch ./bin/perl (after exporting PERL5LIB) and all the modules have to look for their libraries inside ./lib.
I think that this could be done by specifying LDFLAGS="-R$ORIGIN/../lib" but while it does work for C, I'm not able to do this with Perl/CPAN. How can I do?
I've compiled XML::Parser in this way on the VM:
debian:~/dev# cd expat-2.0.1 debian:~/dev/expat-2.0.1# LDFLAGS="-R$ORIGIN/../lib" ./configure --pre +fix=/root/perl5 debian:~/dev/expat-2.0.1# make && make install debian:~/dev/expat-2.0.1# cd .. debian:~/dev# cpan cpan[1]> look XML::Parser debian:~/.cpan/build/XML-Parser-2.41-dCfdKY# export LD_LIBRARY_PATH=/r +oot/perl5/lib debian:~/.cpan/build/XML-Parser-2.41-dCfdKY# perl Makefile.PL EXPATLIB +PATH=/root/perl5/lib EXPATINCPATH=/root/perl5/include debian:~/.cpan/build/XML-Parser-2.41-dCfdKY# make && make install debian:~/.cpan/build/XML-Parser-2.41-dCfdKY# exit
As I will have to do the same for XML::LibXML and XML::LibXSLT will the eventual solution work too? Thank you.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Editing RPATH of Perl module XML::Parser
by Anonymous Monk on Dec 11, 2011 at 22:42 UTC | |
by virtualdj (Initiate) on Dec 13, 2011 at 19:33 UTC | |
by Eliya (Vicar) on Dec 13, 2011 at 20:11 UTC | |
by virtualdj (Initiate) on Dec 14, 2011 at 18:20 UTC | |
by Eliya (Vicar) on Dec 14, 2011 at 19:22 UTC | |
|