我正在尝试使用 Kotlin/native 编写一个 libretro 核心。libretro 核心包含一个 C 库(动态或静态),它导出libretro.h中的所有函数大纲。我相信这应该是可能的,因为 kotlin/native 能够导出一个可由 C 程序调用的库,但我还没有设法让它输出一个甚至类似于 libretro 头文件的库。
我最初的方法是使用 cinterop 工具构建一个 klib 文件,并希望它允许我让一个类将头文件实现为接口。这没有用,我已经开始尝试让我的 kotlin 代码输出一个类似于 libretro 头文件的 C 头文件。我对这两种方法都没有任何运气,我也无法想到使用纯 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())
}
一旦它被导出到标题,最终看起来像这样。我可以使用 @CName 注释将函数从默认情况下放置的包结构中取出,但我仍然遇到函数类型签名、#define 宏和枚举(可能还有其他问题,但这些是到目前为止我遇到的那些)。