Не удается запустить "linkDebugFrameworkIos" в Kotlin Multiplatform при связывании iOS Framework
Я пытаюсь связать.framework iOS с Kotlin Multiplatform/Native, чтобы я мог использовать его в Kotlin. Я успешно связываю Framework с Kotlin Multiplatform/Native, и соответствующие пакеты содержат заголовки, которые я связал.
тем не мение Undefined symbols for architecture
происходит всякий раз, когда я пытался построить проект.
Я пытался компилировать на другую архитектуру для iPhone Simulator на iosX64
предустановка и для iPhone iosArm64
предустановки.
И я попытался добавить сам.framework в проект vanilla XCode, и он отлично работает как на симуляторе, так и на iPhone.
Здесь .def
файл
// engine.def
language = Objective-C
package = org.djinnihello
headers = DjinniHelloLib2.h
headerFilter = **
И вот часть build.gradle
файл
//build.gradle
targets {
fromPreset(presets.android, 'android')
// This preset is for iPhone emulator
// Switch here to presets.iosArm64 (or iosArm32) to build library for iPhone device
fromPreset(presets.iosArm64, 'ios') {
compilations.main {
outputKinds('FRAMEWORK')
cinterops {
def productsDir = rootProject.file("iosApp/iosApp/Framework").absolutePath
println(productsDir)
hello {
defFile project.file("src/engine.def")
compilerOpts "-F${productsDir} -framework DjinniHelloLib2"
linkerOpts "-F${productsDir} -framework DjinniHelloLib2"
includeDirs "$productsDir/DjinniHelloLib2.framework/Headers"
}
}
}
}
}
Вот сообщение об ошибке, которое появилось, когда я пытался собрать его в XCode или запустить ./gradlew linkDebugFrameworkIos
> Task :app:cinteropHelloIos UP-TO-DATE
> Task :app:linkDebugFrameworkIos FAILED
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_HWHelloWorld", referenced from:
objc-class-ref in combined.o
ld: symbol(s) not found for architecture arm64
1 ответ
Нашел ответ:
На мультиплатформенный Kotlin 1.1.1
linkerOpts
а также compilerOpts
в build.gradle
ничего не делать. Они должны быть в .def
файл для того, чтобы скомпилировать и запустить.
language = Objective-C
package = org.djinnihello
headers = DjinniHelloLib2.h
headerFilter = **
compilerOpts = -F/absolute/path/to/Framework -framework DjinniHelloLib2
linkerOpts = -F/absolute/path/to/Framework -framework DjinniHelloLib2