Kotlin/Native 导入C语言动态库、静态库

首先,不支持C++库,如果需要可以先自己封装成C库

官方教程 Definition file | Kotlin Documentation

1.静态库 .lib(Windows) .a(Linux)

ffmpeg.def

package = ffmpeg
headers = libavcodec/avcodec.h libavformat/avformat.h
linkerOpts = -Ilib/ffmpeg/include -Llib/ffmpeg/lib -lavformat -lavfilter -lavcodec -lswresample -lswscale -lavutil -lavdevice -lpostproc
compilerOpts = -Ilib/ffmpeg/include

build.gradle.kts

nativeTarget.compilations.getByName("main") {
    cinterops {
        val dobby by creating {
            defFile(project.file("lib/dobby/dobby.def"))
        }
    }
}

2. 动态库 .dll(Windows) .so(Linux)

  • windows 和 静态库一样,编译完成后会生成dll和lib,链接lib文件并在PATH中添加dll即可
  • linux没有a文件,直接链接so文件会自动找到导出符号

dobby.def

package = dobby
headers = dobby.h
linkerOpts = lib/libdobby.so
compilerOpts = -Ilib/dobby

build.gradle.kts

nativeTarget.binaries.executable {
    runTask?.environment("PATH", "%PATH%;lib/ffmpeg/bin;")
}
nativeTarget.compilations.getByName("main") {
    cinterops {
        val dobby by creating {
            defFile(project.file("lib/ffmpeg/ffmpeg.def"))
        }
    }
}