Я пытаюсь написать ядро libretro, используя Kotlin / native.Ядро libretro состоит из библиотеки C (динамической или статической), которая экспортирует все наброски функций в libretro.h .Я считаю, что это должно быть возможно, потому что kotlin / native способен экспортировать библиотеку, которая может быть вызвана программой на C, но мне пока не удалось получить ее для вывода библиотеки, которая даже напоминает заголовочный файл libretro.
Мой первоначальный подход заключался в создании файла klib с использованием инструмента cinterop и в надежде, что это позволит мне сделать класс реализующим заголовок в качестве интерфейса.Это не сработало, и с тех пор я попытался сделать так, чтобы мой код kotlin выводил заголовочный файл C, который похож на заголовочный файл libretro.Мне не повезло ни с одним из этих методов, и я не смог придумать другой способ, используя чисто kotlin / native.
Мой код
val RETRO_DEVICE_NONE: Int = 0
@CName(externName = "hello", shortName = "hello")
fun hello(): String = "Hello, Kotlin/Native!"
@CName(externName = "helloInt", shortName = "helloInt")
fun helloInt(): Int = 123
fun main(args: Array<String>) {
println(hello())
}
в конечном итоге выглядит как this после его экспорта в заголовок.Я могу использовать аннотацию @CName, чтобы поднять функцию из структур пакета, в который она помещена по умолчанию, но я все еще сталкиваюсь с проблемами с сигнатурами типов функций, #define макросами и перечислениями (и, возможно, другими вещами, но этоте, с которыми я столкнулся до сих пор).