Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: Editing RPATH of Perl module XML::Parser

by Anonymous Monk
on Dec 11, 2011 at 22:42 UTC ( [id://942979]=note: print w/replies, xml ) Need Help??


in reply to Editing RPATH of Perl module XML::Parser

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?

It works for perl too, simply export LDFLAGS=... or edit Makefile.PL and add it to ExtUtils::MakeMaker::WriteMakefile

Perl/"CPAN" does not override this, so export LDFLAGS= or any other linker/compiler options should just work, every time :)

http://perl5.git.perl.org/perl.git?a=search&h=HEAD&st=grep&s=rpath
http://perl5.git.perl.org/perl.git?a=search&h=HEAD&st=grep&s=rpath
http://www.gnu.org/software/libtool/manual/libtool.html#index-LDFLAGS-107

http://www.linuxsampler.org/msys.html

Re: Installing iodbc 0.1 via CPAN (or other means) on Mac OS 10.6

So you could, change Rpath after the fact

chrpath- a tool to change the DT_RPATH attribute of an executable and convert it to an DT_RUNPATH attribute
patchELF - a small utility to modify the dynamic linker and DT_RUNPATH attribute of ELF executables.

set it through ldflags

export LDFLAGS=...

link against static versions of libxml/libxslt/libexpat...

./configure --enable-static --disable-shared
./configure --enable-static --disable-shared CFLAGS=-static-libgcc prefix=/my/install/prefix
$config{LIBS}='-l...libxml2.a -l...libiconv.a'; $config{INC}='-I...include/libxml2'; $config{DEFINE} =' -DLIBXML_STATIC '; WriteMakefile( %INFOS, %config, );

Or when setting up your development enviroment, mirror your target directory structure with symbolic links

ln -s itsmylocal/xmltv /.../xmltv

Replies are listed 'Best First'.
Re^2: Editing RPATH of Perl module XML::Parser
by virtualdj (Initiate) on Dec 13, 2011 at 19:33 UTC

    Thanks for your answer but, unfortunately, it doesn't work.

    Actually I've already tried with LDFLAGS but it seems that it doesn't apply to Perl modules (I mean the compiled ".so" files that are placed inside the Perl libraries folder).

    You can see it in detail here:

    cpan[1]> look XML::Parser debian:~/.cpan/build/XML-Parser-2.41-eA1hds# export LDFLAGS="-R$ORIGIN +/../lib" debian:~/.cpan/build/XML-Parser-2.41-QQ3gvQ# export LD_LIBRARY_PATH=/r +oot/perl5/lib debian:~/.cpan/build/XML-Parser-2.41-eA1hds# perl Makefile.PL EXPATLIB +PATH=/root/perl5/lib EXPATINCPATH=/root/perl5/include Checking if your kit is complete... Looks good Writing Makefile for XML::Parser::Expat Writing MYMETA.yml and MYMETA.json Writing Makefile for XML::Parser Writing MYMETA.yml and MYMETA.json debian:~/.cpan/build/XML-Parser-2.41-QQ3gvQ# make && make install debian:~/.cpan/build/XML-Parser-2.41-QQ3gvQ# readelf -d ./blib/arch/au +to/XML/Parser/Expat/Expat.so | grep RPATH 0x0000000f (RPATH) Library rpath: [/root/perl5/lib]

    The last line shows "/root/perl5/lib" instead of the correct "../lib".

      Try LDDLFLAGS.   As it defaults to $Config{lddlflags} (i.e. perl -V:lddlflags), you have to be careful not to overwrite anything that might be in there already (in other words, whatever you specify does replace, not add/append to it).

      As a last resort, you could try OTHERLDFLAGS (which is typically unused). — Usage (in Makefile.PL):

      WriteMakefile( ... dynamic_lib => { OTHERLDFLAGS => "-Wl,-rpath,/your/lib/path" }, );

      (In the link command in the Makefile, the values are issued in the following order: $(LD) $(LDDLFLAGS) $(LDFROM) $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) ... )

        Hi, unfortunately neither prepending LDDLFLAGS="-R$ORIGIN/../lib" to "perl Makefile.PL" nor editing the Makefile.PL:

        WriteMakefile1( ABSTRACT_FROM => 'Parser.pm', AUTHOR => 'Clark Cooper (coopercc@netheaven.com)', LICENSE => 'perl', MIN_PERL_VERSION => '5.00405', META_MERGE => { resources => { repository => 'http://github.com/chorny/XML-Parser', }, }, #BUILD_REQUIRES => { #}, NAME => 'XML::Parser', DIR => [qw(Expat)], dist => {COMPRESS => 'gzip', SUFFIX => '.gz'}, VERSION_FROM => 'Parser.pm', PREREQ_PM => { LWP => 0, #for tests }, $^O =~/win/i ? ( dist => { TAR => 'ptar', TARFLAGS => '-c -C -f', }, ) : (), dynamic_lib => { OTHERLDFLAGS => "-Wl,-rpath,\$ORIGIN/../lib" }, @extras );

        did work. In fact when I make, see the LD_RUN_PATH variable (it's always the same):

        Running Mkbootstrap for XML::Parser::Expat () chmod 644 Expat.bs rm -f ../blib/arch/auto/XML/Parser/Expat/Expat.so LD_RUN_PATH="/root/perl5/lib" cc -shared -O2 -L/usr/local/lib -fstack +-protector Expat.o -o ../blib/arch/auto/XML/Parser/Expat/Expat.so + \ -L/root/perl5/lib -lexpat \ chmod 755 ../blib/arch/auto/XML/Parser/Expat/Expat.so

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://942979]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (4)
As of 2024-03-29 00:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found