這里依然使用上一篇kotlin-native03 調(diào)用c靜態(tài)庫中的simplelib勤哗,只是新建工程的時(shí)候?qū)ibrary type改為shared(或者直接在上一篇的項(xiàng)目中更改CMakeList.txt, 在add_library中將STATIC改為SHARED)
cmake_minimum_required(VERSION 3.14)
project(simplelib C)
set(CMAKE_C_STANDARD 99)
add_library(simplelib SHARED simplelib.c simplelib.h)
simplelib.h, simplelib.c和上一篇文章的一樣
-
編譯項(xiàng)目穷劈,得到libsimple.dll
libsimplelib.dll
正式開始
-
將.h文件和.dll文件拷貝到新建的kotlin-native工程中辛慰,項(xiàng)目結(jié)構(gòu)如下
項(xiàng)目結(jié)構(gòu) - 首先是編寫simplelib.def文件螺垢。同上個(gè)工程一樣尖昏,def文件放置于src/nativeInterop/cinterop路徑下(kotlin-multiplatform默認(rèn)的def文件路徑,也可以在build.gradle.kts中指定這個(gè)路徑(mingwX64->cpmlilations["main"].cinterops->
yourInteropFileName
->defFile(project.file(relativePathToTheDefFile
))))
headers = simplelib/simplelib.h
headerFilter = simplelib/*
linkerOpts = lib/libsimplelib.dll
- 注意這里添加的linkerOpts聚凹,指定dll文件的位置割坠,不然編譯會(huì)報(bào)錯(cuò)
- 然后是build.gradle.kts文件(Clion更新之后的gradle腳本默認(rèn)就是kts了)
plugins {
kotlin("multiplatform") version "1.3.41"
}
repositories {
mavenCentral()
}
kotlin {
mingwX64("tryagain") {
compilations["main"].cinterops {
val simplelib by creating {
includeDirs.headerFilterOnly("include")
packageName("simplelib")
}
}
binaries {
executable("tryagain") {
entryPoint = "cn.hohov.main"
}
}
}
}
- 接下來就是Hello.kt代碼了
package cn.hohov
import platform.posix.system
import simplelib.*
import kotlinx.cinterop.toKString
fun main() {
hello()
println(getString()?.toKString())
system("pause")
}
-
gradle build, 得到tryagain.exe, 我們將libsimplelib.dll拷貝到這個(gè)目錄下,就可以雙擊執(zhí)行了
執(zhí)行結(jié)果