Вызов нативной функции требует трёх шагов: найти её адрес в динамической библиотеке (SymbolLookup), описать её C-сигнатуру (FunctionDescriptor) и создать MethodHandle через Linker.downcallHandle. Этот дескриптор downcall затем можно вызвать с Java-аргументами — линкер автоматически обрабатывает преобразование типов и соглашение о вызовах.
SymbolLookup — поиск нативных символов