在Kotlin/Native
的cinterop
文档中,您必须定义一个.def
文件,例如:
language = Objective-C
modules = FirebaseCore
compilerOpts = -framework FirebaseCore
linkerOpts = -framework FirebaseCore
现在,您还可以在cinterop
块中指定compilerOpts
,例如:
compilations["main"].cinterops {
firebasecore {
packageName 'cocoapods.FirebaseCore'
defFile = file("$projectDir/src/iosMain/c_interop/FirebaseCore.def")
includeDirs ("$projectDir/../iosApp/Pods/FirebaseCore/Firebase/Core/Public")
compilerOpts ("-F$projectDir/src/iosMain/c_interop/modules/FirebaseCore-${versions.firebaseCoreIos}")
}
}
我只举了凯文·加利根(Kevin Galligan(的例子:KMPFirestore。
我真的很困惑 gradle 内部的compilerOpts
与文件中compilerOpts
.def
有什么区别?
我没有强大的 C 背景,我只是想学习Kotlin Multiplatform
(现在只是想了解如何与 c 或 objectiveC 库互操作(,但我无法正确设置它们。
我真的很感激一些帮助,因为我什至不完全了解.def
文件是如何工作的。
任何与理解这些事情有关的阅读材料都会有很大帮助。
AFAIK,两个编译器选择将在生成互操作时合并。可悲的是,链接器选择不能以这种方式工作。但是为了让互操作正常工作并链接,我必须在 .def 文件中为 linkerOpts 指定框架的绝对路径。