Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <c0bb87c2-2d46-8f11-f27f-95ee4d433c62@bell-sw.com>
Date: Thu, 4 Jun 2020 22:37:40 +0300
From: Alexander Scherbatiy <alexander.scherbatiy@...l-sw.com>
To: Rich Felker <dalias@...c.org>
Cc: musl@...ts.openwall.com, Markus Wichmann <nullplan@....net>
Subject: Re: Shared library loading

On 25.05.2020 20:46, Rich Felker wrote:

> On Mon, May 25, 2020 at 08:26:51PM +0300, Alexander Scherbatiy wrote:
>>    What is the suggested way in musl to load $libdir/myapp/libfoo.so
>> from a custom directory so libbar.so can find it?
> Probably putting the dir in your application's rpath (or in the rpath
> of libbar). dlopen is not a tool for (effectively) adding additional
> directories to the library search path.

OpenJDK can have several jvm variants (like server, client, minimal).
Each of variants contains its own version of libjvm.so lib.
   jdk/bin/java
   jdk/lib/server/libjvm.so
   jdk/lib/client/libjvm.so
   jdk/lib/minimal/libjvm.so

When java is executed it first loads libjvm.so for the requested variant
using dlopen() with RTLD_NOW | RTLD_GLOBAL flags [1] and then
loads libraries from jdk/lib dir with dlopen() and RTLD_LAZY flag.

To make it works with musl JDK implements workaround where
it puts libjvm.so into LD_LIBRARY_PATH [2] and re-executes itself.

Is there a better way to handle the case where an application
with several lib variants can load common libraries
without changing LD_LIBRARY_PATH?

[1] 
https://hg.openjdk.java.net/portola/portola/file/7ff60204a181/src/java.base/unix/native/libjli/java_md_solinux.c#l590
[2] 
https://hg.openjdk.java.net/portola/portola/file/7ff60204a181/src/java.base/unix/native/libjli/java_md_solinux.c#l244

Thanks,
Alexander.
> Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.