我使用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"
然后我尝试运行该项目,并在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“
答案 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