2012-04-18 89 views
4

我已經創建了一個使用Xcode 4的Cocoa Touch靜態庫,我想在MonoTouch項目中使用它。我如何繼續?如何將Cocoa Touch靜態庫鏈接到MonoTouch項目?

這裏是我的靜態庫的內容:

MyClass.h
header

MyClass.m
implementation


我建立 「建立歸檔」 後在THIS BLOG POST之後,我將它生成的libMyLib.a添加到新的MonoT中ouch綁定項目。
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空。


然後我建有發佈,並採取了DLL bin文件夾,並把它添加到一個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 /項目/ TestProject/TestProject」 「-lmylib」 「-force_load」 「-ObjC」

回答

1

錯誤消息MT5201告訴你有一個錯誤,而這樣做的本地鏈接步驟。這是100%的確定。第二部分要求檢查你的失敗最常見的原因gcc_flags。但它是不是 100%確定這是問題。當你尋求幫助時,你應該總是在任何錯誤上面粘貼行(因爲它們可能有用)。

錯誤是可能有關給予本機鏈接器的選項的重複。發生這種情況是因爲您提供了兩次(即在綁定項目和主項目中)。

Binding Objective-C Types文章您鏈接:

或者你可以集級別LinkWithAttribute的優勢,你可以在你的合同文件中嵌入...

這意味着額外的mTouch參數需要你們用LinkWith屬性。既然你使用這種方式(最好的:-)來綁定你的靜態庫,你可以跳過這一步(從你的主項目)。

通過這樣做,您可以自己(以及任何使用您的圖書館的人)獲得好處,因爲他們的風險較低(例如圖書館更新或不同的構建配置)。

+0

當我刪除了額外的mTouch爭論,沒有什麼工作。我可以從我的綁定中調用MyClass.Test(「str」),但沒有任何反應,我不知道我的綁定有什麼問題。它可能與我的xcode項目中缺少編譯器標誌有關嗎?或者因爲我在構建我的靜態庫時選擇了「Build For Archiving」(構建存檔)? – 2012-04-18 20:25:49

+0

**沒有任何作品**它建立並沒有以前(所以我稱之爲進展;-)。現在爲什麼?很難說。 '.a'是一個可用於您使用的模擬器/設備測試應用程序的胖庫嗎? – poupou 2012-04-18 20:42:31

相關問題