【问题标题】:How to link a Cocoa Touch Static Library to a MonoTouch project?如何将 Cocoa Touch 静态库链接到 MonoTouch 项目?
【发布时间】:2012-04-18 18:43:13
【问题描述】:

我使用 Xcode 4 创建了一个 Cocoa Touch 静态库,我想在 MonoTouch 项目中使用它。我该如何进行?

这是我的静态库的内容:

MyClass.h

MyClass.m


在关注THIS BLOG POST 之后,我使用“Build For Archiving”进行构建,然后我将它生成的 libMyLib.a 添加到一个新的 MonoTouch 绑定项目中。

然后我把libMyLib.linkwith.cs的内容替换了,因为THIS BLOG POST是这么说的。

[assembly: LinkWith ("libMyLib.a", LinkTarget.ArmV6 | LinkTarget.ArmV7 | LinkTarget.Simulator, ForceLoad = true, Frameworks="CoreGraphics QuartzCore UIKit")]

然后我将此添加到 ApiDefinition.cs

我将 StructsAndEnums.cs 留空。


然后我使用 Release 构建并从 bin 文件夹中获取 dll 并将其添加到 MonoTouch iPad 项目的根目录中,并将其添加到引用中。

然后,按照THIS ARTICLE 中的说明,我将 mtouch 参数设置为此

-gcc_flags "-L${ProjectDir} -lMyLib -force_load -ObjC"

然后我尝试运行该项目,但在构建输出中出现此错误

错误 MT5201:本机链接失败。请查看提供给 gcc 的用户标志:“-L/Users/herpderp/Projects/TestProject/TestProject”“-lMyLib”-force_load “/Users/herpderp/Projects/TestProject/TestProject/libMyLib.a”“-L/Users/ herpderp/Projects/TestProject/TestProject" "-lMyLib" "-force_load" "-ObjC"

【问题讨论】:

    标签: ios cocoa-touch linker xamarin.ios static-libraries


    【解决方案1】:

    此目录包含一个完整示例,展示了将 Objective-C 库与 MonoTouch 集成的各种方法:

    https://github.com/xamarin/monotouch-samples/tree/master/BindingSample

    【讨论】:

    • 有帮助,我只是修改了示例项目以满足我的需要
    【解决方案2】:

    MT5201 的错误消息告诉您在执行本机链接步骤时出现错误。这是 100% 确定的。第二部分要求检查您的gcc_flags,这是失败的最常见原因。但是,不是 100% 确定这是问题所在。当您寻求帮助时,您应该始终将这些行粘贴到任何错误上方(因为它们可能有用)。

    错误是可能与提供给本机链接器的选项重复有关。发生这种情况是因为您确实提供了两次(即在绑定项目和主项目中)。

    来自您链接的Binding Objective-C Types 文章:

    或者您可以利用程序集级别的 LinkWithAttribute,您可以将其嵌入到您的合同文件中...

    这意味着 额外的 mtouch 参数在您使用 LinkWith 属性时是不需要。由于您使用这种方式(最好的方式 :-) 来绑定静态库,因此您可以跳过此步骤(从您的主项目中)。

    这样做是您自己(以及使用您的库的任何人)的一个忙,因为它们不同步的风险较小(例如库更新或不同的构建配置)。

    【讨论】:

    • 当我删除额外的 mtouch 参数时,没有任何效果。我可以从我的绑定中调用 MyClass.Test("str") ,但没有任何反应,而且我不知道我的绑定有什么问题。这可能与我的 xcode 项目中缺少编译器标志有关吗?还是因为我在构建静态库时选择了“为归档而构建”?
    • Nothing works 它构建得很好,但以前没有(所以我称之为进步 ;-)。现在为什么?很难说。 .a 是一个胖库,可以从您正在使用的模拟器/设备测试应用程序中使用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多