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

Ios 如何将Cocoa Touch静态库链接到MonoTouch项目?,ios,cocoa-touch,linker,xamarin.ios,static-libraries,Ios,Cocoa Touch,Linker,Xamarin.ios,Static Libraries,我已经使用Xcode 4创建了Cocoa Touch静态库,我想在MonoTouch项目中使用它。如何继续? 以下是我的静态库的内容: MyClass.h MyClass.m 在遵循之后,我使用“为存档而构建”进行了构建,并获取了libMyLib.a,它生成并将其添加到一个新的MonoTouch绑定项目中。 然后我替换了libMyLib.linkwith.cs的内容,因为我这么说了 [assembly: LinkWith ("libMyLib.a", LinkTarget.ArmV6 |

我已经使用Xcode 4创建了Cocoa Touch静态库,我想在MonoTouch项目中使用它。如何继续?

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

MyClass.h

MyClass.m


在遵循之后,我使用“为存档而构建”进行了构建,并获取了libMyLib.a,它生成并将其添加到一个新的MonoTouch绑定项目中。

然后我替换了libMyLib.linkwith.cs的内容,因为我这么说了

[assembly: LinkWith ("libMyLib.a", LinkTarget.ArmV6 | LinkTarget.ArmV7 | LinkTarget.Simulator, ForceLoad = true, Frameworks="CoreGraphics QuartzCore UIKit")]
然后我将其添加到ApiDefinition.cs

我让StructsAndEnums.cs空着


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

然后,在遵循中的说明之后,我将mtouch参数设置为

-gcc_flags "-L${ProjectDir} -lMyLib -force_load -ObjC"
然后我尝试运行该项目,但在生成输出中出现了这个错误

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


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

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

从您链接的文章中:

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

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


通过这样做,您可以帮自己(以及使用您的库的任何人)一个忙,因为它们不太可能失去同步(例如库更新或不同的构建配置)。

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


当我删除额外的mtouch参数时,没有任何效果。我可以从我的绑定中调用MyClass.Test(“str”),但什么也没发生,我也不知道我的绑定出了什么问题。这可能与我的xcode项目中缺少编译器标志有关吗?或者是因为我在构建静态库时选择了“构建用于归档”?它构建的任何东西都不能很好地工作,以前也不能(因此我将此过程称为;-)。现在为什么?很难说。
.a
是一个fat库,可以从您正在使用的模拟器/设备测试应用程序中使用吗?这很有帮助,我刚刚修改了示例项目以满足我的需要