如何将Cocoa Touch静态库链接到MonoTouch项目?

时间:2012-04-18 18:43:14

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

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

以下是我的静态库的内容:

MyClass.h
header

MyClass.m
implementation


我在跟随THIS BLOG POST之后使用“Build For Archiving”构建了我生成的libMyLib.a并将其添加到新的MonoTouch绑定项目中。 binding project

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

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

然后我把它添加到ApiDefinition.cs
enter image description here

我将StructsAndEnums.cs留空了。


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

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

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

然后我尝试运行该项目,并在Build Output

中收到此错误
  

错误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“

2 个答案:

答案 0 :(得分:1)

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

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

来自您关联的Binding Objective-C Types文章:

  

或者您可以利用可以嵌入合同文件的程序集级LinkWithAttribute ...

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

通过这样做,你自己(以及任何使用你的库的人)都会受到青睐,因为它们不太可能导致不同步(例如库更新或不同的构建配置)。

答案 1 :(得分:1)

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

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

相关问题