Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Having problems with '-rpath' or '-rpath-link' to ocamlopt
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Gerd Stolpmann <info@g...>
Subject: Re: [Caml-list] Having problems with '-rpath' or '-rpath-link' to ocamlopt
Am Mon, 2003-09-22 um 19.50 schrieb Narayanan Krishnamurthy:
> Hi,
> 
> All the following discussions pertain to SunOS 5.8
> the gnu linker 'ld 2.9.1', the gcc compiler 'gcc 2.95.2' and
> ocaml 3.06.
> 
> I have two versions of the PCRE "C" libpcre.so
> libraries. Let us say that the locations
> of the "C" libraries are as follows.
> 
> a) v1.0 : /usr/local/lib/libpcre.so
> b) v2.0 : /mylocal/libpcre.so
> 
> I've built the ocaml pcre package (5.02: pcre.cmxa and pcre.cma) 
> using the "C" v2.0 shared library /mylocal/libpcre.so.
> I have pcre.cmxa in my current working directory.
> 
> With my LD_LIBRARY_PATH set as
> LD_LIBRARY_PATH = /lib:/usr/lib:/usr/local/lib

No chance. LD_LIBRARY_PATH is searched before any RPATH that is recorded
in the .so file.

> I now run
> a) ocamlopt -o myexec pcre.cmxa myexec.o \
>      -cclib -rpath/mylocal -cclib -lpcre
> 
> and find that 'myexec' has the /usr/local/lib/libpcre.so
> as the run-time shared library instead of
> /mylocal/libpcre.so (I use 'ldd' on 'myexec')
> 
> I tried the following as well and am unable to get
> ocamlopt to link in the run-time library /mylocal/libpcre.so.
> 
> b) ocamlopt -o myexec pcre.cmxa myexec.o \
>      -cclib -R/mylocal -cclib -lpcre
> c) ocamlopt -o myexec pcre.cmxa myexec.o \
>      -cclib -rpath-link/mylocal -cclib -lpcre

If you do "dump -Lv myexec" you will see that the effect is the same:
The RPATH section of the file is set to /mylocal.

> If I unset my LD_LIBRARY_PATH, everything works fine
> and the correct library is linked in (I tried
> 'strings pcre.cmxa' and see the path /mylocal hard-coded
> in there).
> If I set LD_LIBRARY_PATH as
> /lib:/usr/lib:/mylocal:/usr/local/lib
> it works fine.
> 
> It seems like I am unable to override the LD_LIBRARY_PATH
> environment variable using '-rpath' for the linker.
> So, what am I doing wrong with the '-rpath' or '-rpath-link'
> commands that I'm passing through 'ocamlopt'?
> Any information would be greatly appreciated.
> Thanks.

Because of the phenomenons you have found it is a very bad idea to set
LD_LIBRARY_PATH. This variable is a debugging aid, and no substitute for
a proper system setup.

Fortunately you run Solaris 8. For previous versions, the only way out
is to drop the idea of extending the system search path for libraries,
and to use RPATH all the time. For Solaris 8, you can modify the system
search path with the crle utility:

crle -l /usr/lib -l /usr/local/lib

Note that using crle is dangerous, and wrong usage may corrupt your
system (you can end up that you cannot start any program), so read the
man page.

Gerd
-- 
------------------------------------------------------------
Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany 
gerd@gerd-stolpmann.de          http://www.gerd-stolpmann.de
------------------------------------------------------------

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners