Kotlin native 互操作链接器找不到框架

标签 kotlin kotlin-interop kotlin-native kotlin-multiplatform

我正在尝试在 Kotlin Multiplatform 项目中使用 cocoapods 框架。
所以我

  • 向 Pods 文件添加了框架。
  • 运行 pod 安装。
  • 已创建 .def文件
  • 已添加 cinterop配置在 build.gradle
  • ./gradlew cinteropFirebaseIos运行成功。它生成 .klib所以我可以在 kotlin 代码中看到类。
    但是当我尝试运行 iOS 应用程序构建失败并显示以下消息时:

    Showing Recent Messages

    > Task :app:linkDebugFrameworkIos

    ld: framework not found FirebaseDatabase

    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld invocation reported errors


    这是我在 build.gradle 中的配置
        fromPreset(presets.iosX64, 'ios') {
            compilations.main {
                outputKinds('FRAMEWORK')
                cinterops {
                    firebase {
                        def proj = "${System.getProperty("user.home")}/Projects/kmpp"
                        def pods = "${proj}/iosApp/Pods"
    
                        defFile "${proj}/app/src/iosMain/c_interop/libfirebase.def"
    
                        includeDirs "${pods}/Firebase",
                                "${pods}/Firebase/CoreOnly/Sources",
                                "${pods}/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers"
                    }
                }
            }
        }
    
    这是我的 .def文件:
    language = Objective-C
    headers = /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseCore/Firebase/Core/Public/FIRApp.h /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabase.h /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseCore/Firebase/Core/Public/FirebaseCore.h
    
    compilerOpts = -framework FirebaseDatabase
    linkerOpts = -framework FirebaseDatabase
    
    enter image description here
    我怎样才能弄清楚出了什么问题?我在 .def 中错过了什么吗?文件 ?在 build.gradle ?

    最佳答案

    这里有两个问题时刻:

  • .def 中 C 头文件的完整路径文件通常是不可取的,而是通过 includeDirs到 Firebase 安装,如 https://github.com/JetBrains/kotlin-native/blob/c7c566ce0f12221088a8908b6dc8e116c56a931b/samples/gtk/build.gradle#L22会有所帮助
  • 链接问题来自类似的问题 - 链接器只是不知道在哪里寻找框架库,所以传递给 compilations.main.linkerOpts有点喜欢 -F /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseCore/应该会有所帮助,例如参见 https://github.com/JetBrains/kotlin-native/blob/c7c566ce0f12221088a8908b6dc8e116c56a931b/samples/videoplayer/build.gradle#L15
  • 关于Kotlin native 互操作链接器找不到框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54047711/

    相关文章:

    安卓火力地堡 : Update/Add record in Nested Array data

    json - 使用 spring/jackson 将 Kotlin 数据类转换为 JSON

    Kotlin 扩展函数访问 Java 私有(private)字段

    kotlin - 在 iOS/XCode 的内置 .frameworks 中包含 Kotlin/Native KDocs 文档

    java - android studio 中必需的插件 Kotlin 被禁用错误

    android - 无法使用 RxKotlin 的 'observeOn' 主线程

    Kotlin 构造函数委托(delegate)给内部数据类?

    ios - 无法将 ios 应用程序构建到设备中,因为 "embedded framework ' SharedCode.framework' 是为 iOS 模拟器构建的。”

    android - Kotlin 中的 Listener 和 High-Order 函数有什么区别?