【问题标题】:Kotlin native interop linker could not find frameworkKotlin 本机互操作链接器找不到框架
【发布时间】:2019-05-31 13:02:14
【问题描述】:

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

  • 向 Pods 文件添加了框架。
  • 运行 pod install。
  • 已创建.def 文件
  • build.gradle 中添加了cinterop 配置

./gradlew cinteropFirebaseIos 运行成功。它生成.klib,所以我可以在 kotlin 代码中看到类。 但是当我尝试运行 iOS 应用程序构建失败并显示消息:

显示最近的消息

> 任务:app:linkDebugFrameworkIos

ld:找不到框架 FirebaseDatabase

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld 调用报错

这是我在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

我怎样才能找出问题所在?我错过了.def 文件中的某些内容吗?在build.gradle?

【问题讨论】:

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


    【解决方案1】:

    这里有两个问题时刻:

    【讨论】:

    • 谢谢@Nikolay。关于标头的完整路径,这很明显,我一直在尝试这样做,但它无法解决导入问题。例如Firebase.h#import <FirebaseCore/FirebaseCore.h> 开头,但FirebaseCore.h 放在iosApp/Pods/FirebaseCore/Firebase/Core/Public/ 文件夹下。
    • 另一个很奇怪的事情是FIRAnalyticsConnector.frameworkFirebaseAnalytics.frameworkFirebaseCoreDiagnostics.frameworkFirebaseInstanceID.frameworkGoogleAppMeasurement.framework 在我的Pods 文件夹中,尽管我没有安装这些pod。 FirebaseDatabase.framework 我在 /Users/oleg/Library/Developer/Xcode/DerivedData/iosApp-dhmxgbkvemesnaamasxaqqyuqyox/Build/Products/Debug-iphonesimulator/FirebaseDatabase/ 文件夹中找到。现在,当我指定这个框架时,我收到了一些 Undefined symbols for architecture x86_64: 错误(其中有很多)。
    • 顺便说一句,linkerOpts.gradle.def 文件中都有。它们是一样的吗?
    • 还有一个问题:传递依赖呢? Firebase 由几个库/框架组成,例如 Core、Database、Firestore、Messaging 等。它们相互依赖。指定我正在使用的其中一个就足够了吗?还是我应该指定所有这些?
    • .def 和 Gradle 插件的链接器选项本质上是串联的。
    猜你喜欢
    • 2019-05-29
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多