Kotlin / Native cinterop: compilerOpts внутри файла .def против compilerOpts внутри gradle - PullRequest
0 голосов
/ 08 января 2020

В документации cinterop для Kotlin/Native вы должны определить файл .def, например:

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

Теперь вы также можете указать compilerOpts в блоке 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}")
    }
}

Я взял этот пример только от Кевина Галлигана: KMPFirestore .

Я действительно запутался, в чем разница между compilerOpts внутри gradle vs compilerOpts внутри .def файла?

У меня нет сильного C фона, и я просто пытаюсь выучить Kotlin Multiplatform (а сейчас просто пытаюсь понять, как взаимодействовать с c или объективные C библиотеки), но я не могу их правильно настроить.

Буду очень признателен за некоторую помощь, так как даже не до конца понимаю, как работает файл .def.

Любой материал для чтения, связанный с пониманием этих вещей, очень помог бы.

1 Ответ

1 голос
/ 09 января 2020

AFAIK, два параметра компилятора будут объединены при создании операций. К сожалению, linkerOpts не работает таким образом. Но для того, чтобы взаимодействие работало правильно и ссылки, мне пришлось указать абсолютный путь фреймворков для linkerOpts в файле .def.

...