Calling inline functions
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Mon Apr 20 13:25:11 UTC 2020
Inline functions do not exist in the .so/.dll/.dynlib file. They are
essentially function-like macros, expanded by the compiler whenever they
are used.
If you want to call them using the current support you need to create
your own C library wrapper which exposes the additional symbol (as a
regular function) and then calls the corresponding inline function. Then
you extract your header (which will also include the original header you
wanted to work on) with jextract.
In the future we might automate support for function-like macro a
little, by providing jextract API plugins which generate the correct
plumbings.
Maurizio
On 20/04/2020 13:34, Ty Young wrote:
> Is calling inline functions supported right now? I'm trying to call
> this function:
>
>
> __attribute__((always_inline)) static inline int
> internal_load_libgamemode(void)
>
>
> with:
>
>
> this.address =
> gamemode_client_h.LIBRARY_LOOKUP.lookup("internal_load_libgamemode");
>
> this.descriptor = FunctionDescriptor.of(MemoryLayouts.C_INT);
>
> this.type = MethodType.methodType(int.class);
>
> this.handle =
> Foreign.getInstance().getSystemABI().downcallHandle(this.address,
> this.type, this.descriptor);
>
>
> ...but it fails saying the symbol doesn't exist. Is there a way to
> call it?
>
>
> Full header:
> https://github.com/FeralInteractive/gamemode/blob/master/lib/gamemode_client.h
>
>
More information about the panama-dev
mailing list