4

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

这是我的静态库的内容:

我的类.h
标题

我的班级.m
执行


在关注此博客文章后,我使用“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 项目的根目录中,并将其添加到引用中。

然后,按照本文中的说明进行操作后,我将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"

4

2 回答 2

1

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

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

于 2012-04-18T21:28:34.880 回答
1

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

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

从您链接的Binding Objective-C Types文章中:

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

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

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

于 2012-04-18T20:17:42.360 回答