0

cinterop在for 的文档中Kotlin/Native,您必须定义一个.def文件,例如:

language = Objective-C
modules = FirebaseCore
compilerOpts = -framework FirebaseCore
linkerOpts = -framework FirebaseCore

compilerOpts现在您还可以在块中指定 a ,cinterop例如:

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

我真的很困惑compilerOpts内部 gradle 和compilerOpts内部.def文件有什么区别?

我没有强大的 C 背景,我只是想学习Kotlin Multiplatform(现在只是想了解如何与 c 或 ObjectiveC 库互操作),但我无法正确设置它们。

我真的很感激一些帮助,因为我什至不完全理解.def文件是如何工作的。

任何与理解这些事情相关的阅读材料都会有很大帮助。

4

1 回答 1

1

AFAIK,两个 compilerOpts 将在生成互操作时合并。可悲的是,linkerOpts 不能以这种方式工作。但是为了让互操作正常工作并进行链接,我必须在 .def 文件中为 linkerOpts 指定框架的绝对路径。

于 2020-01-09T16:31:12.023 回答