Обсуждение: Shared library search paths
Some platforms (OSF/cc, HPUX) are already using -rpath or equivalent, so you don't have to specify a shared library search path at runtime. I think that a lot more platforms could use this. Can people comment on whether and how it works on their platform? Essentially, LDFLAGS+=-rpath '$(libdir)' might do the trick for most. -- Peter Eisentraut Sernanders väg 10:115 peter_e@gmx.net 75262 Uppsala http://yi.org/peter-e/ Sweden
For the SGI Irix 6.5, "man ld" gives: .... -rpath library_path Adds the library_path to the search path for DSOs. Each library path is appended to the list of directories at the time the executable or DSO is loaded. This option directs rld(5) to look in the named directories, but to look only for DSOs, and to stop looking when the correct one is found. This option can be specified only when the -shared or -call_shared options are also in effect. For more information, see the rld(5) man page. (C, C++, F77, F90) .... -shared Produces a DSO, creates all of the tables for run-time linking, and resolves references to other specified shared objects. The object created can be used by the linker to make dynamic executables. (C, C++, F77, F90) .... Hope this helps. Mark Peter Eisentraut wrote: > Some platforms (OSF/cc, HPUX) are already using -rpath or equivalent, so > you don't have to specify a shared library search path at runtime. I think > that a lot more platforms could use this. Can people comment on whether > and how it works on their platform? Essentially, > > LDFLAGS+=-rpath '$(libdir)' > > might do the trick for most. > > -- > Peter Eisentraut Sernanders väg 10:115 > peter_e@gmx.net 75262 Uppsala > http://yi.org/peter-e/ Sweden -- Mark Dalphin email: mdalphin@amgen.com Mail Stop: 29-2-A phone: +1-805-447-4951 (work) One Amgen Center Drive +1-805-375-0680 (home) Thousand Oaks, CA 91320 fax: +1-805-499-9955 (work)
Peter Eisentraut wrote: >Some platforms (OSF/cc, HPUX) are already using -rpath or equivalent, so >you don't have to specify a shared library search path at runtime. I think >that a lot more platforms could use this. Can people comment on whether >and how it works on their platform? Essentially, > >LDFLAGS+=-rpath '$(libdir)' > >might do the trick for most. As far as Debian is concerned, use of rpath is a bug. Here's a quote from some Debian system documentation: libtool automatically inserts `-rpath' settings when compiling your program. But `-rpath' can cause big problems if the referenced libraries get updated. Therefore, no Debian package should use the `-rpath' option. libtool also refuses to link shared libraries against other shared libraries. Debian packages have to at least link against libc (with "-lc"), so that the dynamic linker knows whether to use the libc5-compat libraries or not. -- Oliver Elphick Oliver.Elphick@lfix.co.uk Isle of Wight http://www.lfix.co.uk/oliver PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47 6B 7E 39 CC 56 E4 C1 47 GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C ======================================== "For God so loved the world, that he gave his only begotten Son, that whosoever believeth in him should not perish, but have everlasting life." John 3:16
> Some platforms (OSF/cc, HPUX) are already using -rpath or equivalent, so > you don't have to specify a shared library search path at runtime. I think > that a lot more platforms could use this. Can people comment on whether > and how it works on their platform? Essentially, > LDFLAGS+=-rpath '$(libdir)' For linux (at least gcc 2.7.x and 2.95.2 systems): if specified in the compilation step, -Wl,-rpath $(libdir) or if specified directly to the linker -rpath $(libdir) - Thomas
for all the stuff I'm doign lately, I just do: setenv LDFLAGS "-R/usr/local/pgsql/lib -R/usr/local/lib" and let configure handle the rest ... On Tue, 18 Jul 2000, Mark Dalphin wrote: > For the SGI Irix 6.5, "man ld" gives: > > .... > > -rpath library_path > Adds the library_path to the search path for DSOs. Each > library path is appended to the list of directories at the > time the executable or DSO is loaded. This option directs > rld(5) to look in the named directories, but to look only > for DSOs, and to stop looking when the correct one is found. > > This option can be specified only when the -shared or > -call_shared options are also in effect. For more > information, see the rld(5) man page. (C, C++, F77, F90) > > .... > > -shared Produces a DSO, creates all of the tables for run-time > linking, and resolves references to other specified shared > objects. The object created can be used by the linker to > make dynamic executables. (C, C++, F77, F90) > > .... > > Hope this helps. > Mark > > Peter Eisentraut wrote: > > > Some platforms (OSF/cc, HPUX) are already using -rpath or equivalent, so > > you don't have to specify a shared library search path at runtime. I think > > that a lot more platforms could use this. Can people comment on whether > > and how it works on their platform? Essentially, > > > > LDFLAGS+=-rpath '$(libdir)' > > > > might do the trick for most. > > > > -- > > Peter Eisentraut Sernanders v�g 10:115 > > peter_e@gmx.net 75262 Uppsala > > http://yi.org/peter-e/ Sweden > > -- > Mark Dalphin email: mdalphin@amgen.com > Mail Stop: 29-2-A phone: +1-805-447-4951 (work) > One Amgen Center Drive +1-805-375-0680 (home) > Thousand Oaks, CA 91320 fax: +1-805-499-9955 (work) > > > Marc G. Fournier ICQ#7615664 IRC Nick: Scrappy Systems Administrator @ hub.org primary: scrappy@hub.org secondary: scrappy@{freebsd|postgresql}.org
Oliver Elphick writes: > As far as Debian is concerned, use of rpath is a bug. Here's a quote from > some Debian system documentation: > > libtool automatically inserts `-rpath' settings when compiling your > program. I don't think so. > But `-rpath' can cause big problems if the referenced > libraries get updated. Therefore, no Debian package should use the > `-rpath' option. I'm not sure I buy that. All -rpath does is add a directory to the search path that the program consults at runtime for its shared libraries. So it's just an alternative in place of hard-coded into dynamic linker /etc/ld.so.conf LD_LIBRARY_PATH but it's the terminally accurate alternative. What does happen if the referenced library gets updated? Nothing. -rpath doesn't reference any libraries, it just suggests to the runtime linker where it might look for one. I don't want to use it to find system libraries, I just want psql to find libpq, and the right libpq, and I want to relieve installers from having to fiddle around with these settings. > libtool also refuses to link shared libraries against other shared > libraries. I don't think so. -- Peter Eisentraut Sernanders väg 10:115 peter_e@gmx.net 75262 Uppsala http://yi.org/peter-e/ Sweden