[foreign] RFC: Jextract -l options ignored by SymbolFilter when -L is not specified

Jorn Vernee jbvernee at xs4all.nl
Tue Jan 22 11:55:04 UTC 2019


I see, that paints a clear picture thanks. So as far as libraries go:

"-l" : record library name in @NativeHeader::libraries
"-rpath" : record runtime library path in @NativeHeader::libraryPaths
"-L" : do symbol checking using the libraries specified by "-l"
"--infer-rpath" : infer "-rpath" values from "-L" values

The picture I had was:

"-l" : record library name in @NativeHeader::libraries AND do symbol 
checking with this library
"-rpath" : record runtime library path in @NativeHeader::libraryPaths
"-L" : provide lookup paths to load libraries for "-l"
"--infer-rpath" : infer "-rpath" values from "-L" values

The current "-L" semantics seem a little unintuitive to me to be honest, 
since "-L" also provide the lookup paths for "-l".

If depending on java.library.path to load libraries with "-l" is 
intended, I would propose replacing the "-L" option with something like 
a "--filter-symbols" option, and have users use java.library.path to 
provide the paths used to load the libraries for "-l", and then have 
"--infer-rpath" copy the paths from java.library.path instead. That way 
we have only one source of library paths (java.library.path).

What do you think?

Jorn

Sundararajan Athijegannathan schreef op 2019-01-22 06:41:
> I don't think it is a bug - afaik it is as per design. The primary use
> of "-l" is to record the library in annotation of the generated jar -
> so that binder can auto-load the library (either from
> java.library.path configuration or -rpath value recorded in
> annotation).  It is okay to record name of the shared object alone and
> leave the library path configuration to java.library.path setting.
> 
> "-L" option is added feature to perform missing symbols checking.
> "-rpath" option is to add a path for library search - so that binder
> can locate the shared object in the specific directory. If no -rpath
> is specified, "-L" is used for runtime search as well.
> 
> -Sundar
> 
> On 22/01/19, 12:01 AM, Jorn Vernee wrote:
>> Hi,
>> 
>> I've recently updated the instructions for using libraries on Windows. 
>> For python the jextract example I gave was:
>> 
>>     jextract -l python27 -o "python.jar" -t "org.python" 
>> C:\Python27\include\Python.h
>> 
>> I'm lacking an `-L` option here (for specifying library directories) 
>> since the contents of PATH seems to be added to java.library.path by 
>> default, and this is presumably also how jextract is able to load the 
>> library. But, since I'm not using an `-L` option, SymbolFilter is not 
>> checking if the symbols are in the python27.dll [1]
>> 
>>     private void initSymChecker(List<String> linkCheckPaths) {
>>         if (!libraryNames.isEmpty() && !linkCheckPaths.isEmpty()) {
>>             // ... init symChecker
>>         } else {
>>             symChecker = null;
>>         }
>>     }
>> 
>> (linkCheckPaths comes from the -L option values)
>> 
>> This behaviour is somewhat unexpected. At least a warning that missing 
>> an `-L` option will turn off symbol checking would be nice.
>> 
>> We could also add the paths in `java.library.path` to the list of link 
>> check paths in jextract [2]. That would mean that the symbol checker 
>> would run for the example command.
>> 
>> What do you think?
>> 
>> Jorn
>> 
>> [1] : 
>> http://hg.openjdk.java.net/panama/dev/file/eaca2d16b80b/src/jdk.jextract/share/classes/com/sun/tools/jextract/SymbolFilter.java#l89
>> [2] : 
>> http://cr.openjdk.java.net/~jvernee/panama/webrevs/jlibpath/webrev.01/


More information about the panama-dev mailing list