System.loadLibrary and CLinker.lookup exception

Jack Andrews effbiae at gmail.com
Tue Apr 26 11:23:25 UTC 2022


On Tue, 26 Apr 2022 at 20:51, Radosław Smogura <mail at smogura.eu> wrote:

> Hi Jack,
>
>
>
> Can you try SymbolLookup (Java SE 18 & JDK 18) (oracle.com)
> <https://docs.oracle.com/en/java/javase/18/docs/api/jdk.incubator.foreign/jdk/incubator/foreign/SymbolLookup.html#loaderLookup()>
>
>
that works: SymbolLookup.loaderLookup() lets me find kinit

has CLinker.systemCLinker().lookup() been deprecated?
if so,

https://github.com/openjdk/panama-foreign/blob/foreign-jextract/doc/panama_ffi.md
needs updating

$ cat Example.java
import jdk.incubator.foreign.*;
import java.lang.invoke.*;
import static jdk.incubator.foreign.ValueLayout.*;

public class Example {

    static CLinker LINKER = CLinker.systemCLinker();

    public static void main(String[] args) throws Throwable {
        System.loadLibrary("k");
        SymbolLookup L = SymbolLookup.loaderLookup();
        NativeSymbol S = L.lookup("kinit").get();
        System.out.println(S);
        MethodHandle kinit = LINKER.downcallHandle(
                L.lookup("kinit").get(),
                FunctionDescriptor.of(JAVA_INT)
        );
        int r = (int) kinit.invoke();
        System.out.println(r);
/*20*/  NativeSymbol T = LINKER.lookup("kinit").get();
        System.out.println(T);
    }
}
$ LD_LIBRARY_PATH=. java --add-modules jdk.incubator.foreign
--enable-native-access=ALL-UNNAMED Example.java
WARNING: Using incubator modules: jdk.incubator.foreign
warning: using incubating module(s): jdk.incubator.foreign
1 warning
NativeSymbolImpl[name=kinit, address=MemoryAddress{ offset=0x7fad2ac4a6f0
}, scope=jdk.internal.foreign.ResourceScopeImpl$GlobalScopeImpl at 3b2c72c2]
717736192
Exception in thread "main" java.util.NoSuchElementException: No value
present
at java.base/java.util.Optional.get(Optional.java:143)
at Example.main(Example.java:20)


More information about the panama-dev mailing list