cmake and RPATH
Thiago Macieira
thiago at kde.org
Thu Feb 16 16:08:02 CET 2006
Alexander Neundorf wrote:
>> LD_LIBRARY_PATH doesn't work on a standard build.
>
>Why ?
Let me just rephrase: doesn't work on a standard KDE build, because we set
-rpath.
Here's what happened:
in order to avoid setting LD_LIBRARY_PATH or /etc/ld.so.conf for every
libdir you installed, someone came up with the idea of RPATH in the ELF
header. You get that when you use the -rpath option to the linker
(-Wl,-rpath to the compiler, or simply -R to libtool).
What it does is that it adds a list of dirs that the dynamic linker should
search *first*.
What no one realised at that time was that searching RPATH before
LD_LIBRARY_PATH was a bad design decision. So, the ELF header with RPATH
always overrides LD_LIBRARY_PATH.
When they realised that, they invented a new ELF header entry: RUNPATH.
This one has the proper behaviour: it allows you to set a default, but it
still allows LD_LIBRARY_PATH to override it.
However, the linkers do not emit this entry by default. You have to tell
them to do it by using the --enable-new-dtags switch to GNU ld
(-Wl,--enable-new-dtags to gcc). If it's not GNU ld, you cannot rely on
it existing.
>> LD_LIBRARY_PATH is a no-op unless you give the compiler the option
>> -Wl,--enable-new-dtags.
>
>LD_LIBRARY_PATH doesn't work without special flags to the linker ?
LD_LIBRARY_PATH works on a normal (non-KDE) link
LD_LIBRARY_PATH doesn't work if you use -rpath to the linker (which we do)
LD_LIBRARY_PATH works again if you use --enable-new-dtags
>> GNU ld has supported it for quite a few years,
>> but I have no idea how the non-GNU linkers on ELF platforms do.
>
>On OS X (which is non-ELF) there's DYLD_LIBRARY_PATH.
Which is orthogonal to the discussion. I was referring to the ELF linkers
that aren't GNU ld, such as the ones you're likely to find on Solaris.
So, let me repeat: in order to support proper build, cmake has to either:
1) enable --enable-new-dtags
or
2) relink
There is no other solution that I can see. And also note that, since
option #1 may not be available in all platforms, cmake has to support
option #2 anyways.
Which binary cmake chooses to relink, that's its own choice. It could
relink the binary it install or it could relink the one you try to run
before installing. It could also have a "developer mode" in which it will
build both.
--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
PGP/GPG: 0x6EF45358; fingerprint:
E067 918B B660 DBD1 105C 966C 33F5 F005 6EF4 5358
1. On frumscafte, hwonne time_t wæs náht, se scieppend þone circolwyrde
wundorcræftlíge cennede and seo eorðe wæs idel and hit wæs gód.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://mail.kde.org/pipermail/kde-buildsystem/attachments/20060216/fa1a99af/attachment.pgp
More information about the Kde-buildsystem
mailing list