Project Panama & dynamic library loading

Ty Young youngty1997 at gmail.com
Sat Sep 7 19:15:01 UTC 2019


On 9/7/19 12:14 PM, Maurizio Cimadamore wrote:
>
> On 07/09/2019 05:17, Ty Young wrote:
>>
>> On 9/6/19 11:04 PM, Henry Jen wrote:
>>>
>>>> On Sep 6, 2019, at 6:47 PM, Ty Young <youngty1997 at gmail.com> wrote:
>>>>
>>>>
>>>> On 9/6/19 8:12 PM, Henry Jen wrote:
>>>>>> On Sep 6, 2019, at 4:58 PM, Ty Young <youngty1997 at gmail.com> wrote:
>>>>>>
>>>>>>
>>>>>> On 9/6/19 6:36 PM, Ty Young wrote:
>>>>>>> On Fri, Sep 6, 2019 at 6:34 PM, Maurizio Cimadamore 
>>>>>>> <maurizio.cimadamore at oracle.com> wrote:
>>>>>>>> Hi Ty, you are not forced to save the library path in the 
>>>>>>>> generated extracted jar with the --record-library-path  option. 
>>>>>>>> If you can also omit that option, and then set 
>>>>>>>> java.library.path (or LD_LIBRARY_PATH) accordingly when it's 
>>>>>>>> time to run your application.
>>>>>> Can java.library.path be modified in code or does it have to be a 
>>>>>> launch option to work? I've always assumed it was a launch option 
>>>>>> only and haven't thought much of it.
>>>>>>
>>>>> It’s a launch option, and thus can adapt to your deployment 
>>>>> environment.
>>>>
>>>> There is no specific "deployment environment". If you were to 
>>>> create bindings in Arch Linux you'd need to specify the pathing for 
>>>> every other Linux distro and even Windows, resulting in not working 
>>>> on more obscure Linux distros and two different builds between 
>>>> Windows and Linux. If you could just dynamically add the paths 
>>>> that'd make this so much easier…
>>>>
>>> In this case, you are looking for a sane system default, which as 
>>> Mauricio mentioned, we need to look for better ways. OpenJDK by 
>>> default is not providing proper value across various Linux distros. 
>>> But java.library.path provide a way to accommodate that. Also, it’s 
>>> possible to
>>>
>>> Usually, a Linux distro will have a customized OpenJDK package has 
>>> customized default.
>>>
>>>>>> It would really be nice if the whole thing was dynamic with zero 
>>>>>> hardcoded values, even if startup time was sacrificed due to 
>>>>>> library searching. With how fragmented the Linux ecosystem 
>>>>>> specifically is, there is never any guarantee that any hardcoded 
>>>>>> values(s) will work for all Linux distros.
>>>>>>
>>>>> Dynamic loading is supported since beginning, typical code snippet 
>>>>> is like following.
>>>>>
>>>>> Library lib = Libraries.loadLibrary(MethodHandles.lookup(), 
>>>>> "tensorflow");
>>>>> libTF = Libraries.bind(c_api_h.class, lib);
>>>>>
>>>>> As long as you define java.library.path to include correct search 
>>>>> path for the native library, it should work just fine.
>>>>
>>>> The search path being static is the problem here. Without a dynamic 
>>>> way to add libraries easily things will blowup real badly.
>>>>
>>>>
>>> With jextract, combine -L option with -l and —record-library-path, 
>>> the provided search paths is saved to be used for runtime. I know 
>>> it’s not the same as an API, but provide the behavior you described?
>>
>>
>> Path(s) or path? None of the examples that I see show multiple 
>> library paths being specified. If it is possible then sure, I guess. 
>> It's still hardcoded and could break but at least I'll have the three 
>> major distros covered and don't have to copy libraries around...
>>
>>
>> That said, can a Windows path be specified alongside the Linux paths?
>
> When you use --record-library-path whatever path you specify with -L 
> will end up saved in the generated annotations. You can put 
> non-existent paths in there - it's no harm, they will be just ignored 
> at runtime on th eplatforms where they don't make sense.


Alright, but how do you specify multiple paths? Something like this:


-L /usr/lib:/usr/lib64


Or does it have its own unique regex?


>
> Maurizio
>
>>
>>
>>>
>>> Cheers,
>>> Henry
>>>


More information about the panama-dev mailing list