【问题标题】:Issues Linking ObjC Library using Xamarin使用 Xamarin 链接 ObjC 库的问题
【发布时间】:2015-01-14 16:35:02
【问题描述】:

过去几天我一直致力于绑定我的第一个 ObjC 库 (SVGKit)。我已经完成了所有的构建和编译,但是当被另一个项目引用时我无法运行它。

我的绑定代码可以在这里找到:https://github.com/jamesmundy/SVGKit.Xamarin

运行时显示如下错误:

无法创建该类型的本机实例 'SVGKitBindings.SVGKImageView':本机类尚未加载。 可以通过设置忽略此条件 ObjCRuntime.Class.ThrowOnInitFailure 为 false。

我检查了我正在使用的静态库,它支持以下平台:

fat 文件中的架构:libSVGKit-iOS.1.2.0.a 是:armv7 i386 x86_64 arm64

我相信这就是我所需要的。

我的链接器文件如下:

[组装:LinkWith(“libSVGKit-iOS.1.2.0.a”,LinkTarget.ArmV7 | LinkTarget.Simulator, SmartLink = true, ForceLoad = true)]

我是否必须以不同的方式配置我正在使用此绑定的项目?非常感谢任何帮助加载本机库。

更新 1:感谢一个建议,我尝试编辑链接器文件以支持与静态库相同的平台,不幸的是它没有解决问题。该文件现在如下:

[组装:LinkWith(“libSVGKit-iOS.1.2.0.a”,LinkTarget.ArmV7 | LinkTarget.模拟器 | LinkTarget.Arm64 | LinkTarget.Simulator64, SmartLink = true, ForceLoad = true)]

我也在所有模拟器上尝试了代码,但不幸的是仍然没有运气。

【问题讨论】:

    标签: ios mono xamarin.ios xamarin


    【解决方案1】:
    [assembly: LinkWith ("libSVGKit-iOS.1.2.0.a", LinkTarget.ArmV7 | LinkTarget.Simulator, SmartLink = true, ForceLoad = true)]
    

    这可能不是您的(唯一)问题,但它不正确。您的 LinkTarget 应该与静态库支持的架构相匹配。 IOW 你错过了Arm64Simulator64

    还可以尝试在不同的模拟器(32 位,如 iPhone 4S 和 64 位,如 iPhone 5S)或设备(同样是 32 位与 64 位)上执行您的应用程序。这将告诉您这是一般问题还是特定于架构的问题(您应该使用这些额外的信息更新您的问题)。

    【讨论】:

    • 谢谢,我会这样做的。
    • 更新了问题,遗憾的是没有变化。
    【解决方案2】:

    在发现我的代码和项目存在一些问题后,我能够解决这个问题。

    • Linker.cs 文件实际上并未随项目一起构建。虽然它在解决方案中,但它没有被编译,因此它包含的将库链接在一起的重要信息丢失了。

    • SVGKit 使用多个框架。我没有在链接器文件中引用这些,还需要一些其他链接器标志。当我解决了这个问题时,文件看起来像这样:

    [组装:LinkWith(“libSVGKit-iOS.1.2.0.a”,LinkTarget.ArmV7 | LinkTarget.模拟器 | LinkTarget.Arm64 | LinkTarget.Simulator64, SmartLink = true, Frameworks="QuartzCore CoreText CoreGraphics CoreImage UIKit", LinkerFlags="-lxml2 -ObjC", ForceLoad = true)]

    【讨论】:

    • 你怎么知道这不是被编译的?您是否设法将任何 Xamarin iOS 项目链接到本机 iOS 框架,尤其是任何使用 AFNetworking 或它自己的任何其他框架的项目?
    • 嗨@JayKannan 抱歉,这是很久以前的事了,我很难记住我的确切步骤。我也经常上 Xamarin 论坛:forums.xamarin.com/discussion/30921/… 我相信我已经链接了使用框架的库,虽然不是 AFNetworking。
    • 你有示例代码要分享吗?互联网上几乎没有。我似乎找不到我做错了什么!我似乎根本无法访问绑定的课程!
    • 很难看出到底是什么问题,但也许我的一些例子会有所帮助?我绑定的每个项目都在我的 GitHub 页面上?github.com/jamesmundy?tab=repositories
    • 你有没有设法直接绑定原生框架?有样品,但我不知道为什么我可以;不能以完全相同的方式绑定我自己的
    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多