如何在Kotlin/Native中导入C互操作生成的类并调用C函数
Kotlin/Native C互操作导入与调用方法
步骤1:确认构建配置与预生成绑定
- 首先检查
build.gradle.kts中的cinterop配置,示例正确配置如下:
kotlin { // 替换为你的目标平台,比如mingwX64、linuxX64、macosX64等 mingwX64("native") { compilations.main { cinterops.create("App") { // 指向你的.def配置文件路径 defFile = project.file("src/nativeInterop/cinterop/App.def") // 自定义生成绑定的包名,可自由设置 packageName = "my.cinterop.binding" } } binaries.executable() } }
- 修改完配置后必须执行一次Gradle构建任务,执行命令
./gradlew assemble(Windows环境用gradlew.bat assemble),生成C绑定的Kotlin代码,否则IDE不会识别对应函数,也不会弹出代码补全。
步骤2:导入绑定内容
- 如果你在配置中指定了
packageName,直接在Kotlin代码开头导入对应包即可:
import my.cinterop.binding.*
- 如果你没有指定
packageName,默认包名为你cinterops.create时传入的名称,比如示例中的App,导入方式为:
import App.*
步骤3:调用C函数
你头文件中声明的void printNameFromC(char* name),生成的Kotlin绑定函数可直接调用,字符串参数需要用.cstr转换为C兼容的字符串格式,示例代码:
fun main() { printNameFromC("测试名称".cstr) }
无代码补全排查方案
- 执行Gradle同步:点击IDE右侧Gradle面板的刷新按钮,同步最新的项目配置
- 清理构建缓存:执行
./gradlew clean后重新执行构建任务 - 检查
.def文件:确认headers字段已经正确引入了App.h,头文件路径配置无误
内容的提问来源于stack exchange,提问作者RagAnt
相关产品推荐
相关产品推荐

