You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Gradle实现Rust与Kotlin/Native互操作时遇问题求助

Kotlin/Native调用Rust共享库的Gradle配置解决方案

1. 移除默认层级模板解决循环依赖

单LinuxX64目标场景下,直接删除applyDefaultHierarchyTemplate()调用。该函数用于多目标代码共享逻辑,单目标使用会触发不必要的依赖循环。

2. 手动配置nativeInterop目录

插件不会自动生成nativeInterop目录,需手动在项目根目录下创建路径:
src/nativeInterop/cinterop
将你的Rust函数def文件(如rustlib.def)放入该目录。

def文件示例配置

headers = rustlib.h
headerFilter = **/*.h
libs = rustlib
linkerOpts = -L/实际路径/到/rust共享库目录
  • headers:指定声明Rust函数的C头文件名
  • libs:Rust共享库名称(Linux下为librustlib.so,此处写rustlib即可)
  • linkerOpts:指定共享库所在目录,替换为你的实际路径

3. 编写Gradle配置脚本(build.gradle.kts)

plugins {
    kotlin("multiplatform") version "1.9.20"
}

kotlin {
    // 声明LinuxX64目标,自定义名称为"linux"
    linuxX64("linux") {
        binaries {
            executable {
                entryPoint = "main" // 指定Kotlin程序入口函数
                // 配置链接参数,指向Rust共享库
                linkerOpts.add("-L/实际路径/到/rust共享库目录")
                linkerOpts.add("-lrustlib")
            }
        }
        // 配置cinterop任务,关联def文件
        compilations.getByName("main") {
            cinterop("rustlib") {
                defFile(project.file("src/nativeInterop/cinterop/rustlib.def"))
            }
        }
    }
}

// 可选:配置Kotlin编译的JVM目标(不影响Native编译流程)
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

4. 终端执行流程

  1. 确保Rust共享库已编译完成,且路径与配置一致
  2. 编译并运行程序:./gradlew linuxRun
  3. 仅编译不运行:./gradlew linuxCompileKotlin

常见问题排查

  • cinterop找不到头文件:检查def文件中headers的路径是否正确,可将头文件放入src/nativeInterop/cinterop目录,或在def中使用绝对路径
  • 链接阶段找不到共享库:将共享库目录添加到系统环境变量LD_LIBRARY_PATH,或在linkerOpts中使用绝对路径指定库文件(如-L/home/user/rust/target/release -lrustlib)

内容的提问来源于stack exchange,提问作者Radon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:22:18