2011-09-14 94 views
2

我需要一些幫助,在XCode中包裝C++庫。在XCode中包裝C++庫

我想要實現的是在XCode中創建新庫,導入C++庫(我有.a和.h文件),將它包裝到Obj-C中,以便將該庫導入到MonoTouch。

我之所以這樣做的原因是,當我嘗試將C++ lib導入到MonoTouch中時,由於名稱重疊,我不斷收到WrongEntryPoint異常。糾正我,如果我錯了,但沒有辦法讓我找出損壞的名字,這取決於編譯器。

預先感謝您

回答

2

糾正我,如果我錯了,但沒有辦法,我找到錯位的名稱,它依賴於編譯器。

技術上你可以。許多編譯器共享相同的mangling syntax,也許是來自Itanium的最有用和最持久的禮物;-)然而,當您更新C++時,它會帶來它自己的痛苦(例如非原始類型,其他編譯器)和維護問題碼。

你會更好地提供服務:

  • 寫作的ObjectiveC包裝和使用的MonoTouch的btouch工具生成的綁定;

  • 寫一個C包裝和使用.NET p/invoke調用您的代碼;

選擇它您本人,但如果你想一想別處再利用C++/C#代碼(例如單聲道的Android)然後使用Ç和P /調用將是可重複使用的。

2

我肯定會推薦在Obj-C庫中包裝庫的路徑,並使用btouch將庫導入到MonoTouch中。我最近爲一個實現了Sybase數據庫引擎的C++庫做了這個工作。如果你看看我的問題,你會發現很多關於包裝C++庫的內容,因爲我發佈了幾次關於我遇到的問題。

具體來說,你可以看看這些問題:

Linking to a C++ native library in MonoTouch

Wrapping a C++ library in Objective-C is not hiding the C++ symbols

Application with static library runs on simulator but not on actual device

Undefined symbols when linking PhoneGap static library in MonoTouch

Linker options 'Link all assemblies" and "Link SDK assemblies only" causes undefined symbols in 3rd party static library

我也建議,如果你打算去Obj-C包裝的路線,你會得到btouch輸出代碼並將其包含在你的項目中,而不是從btouch包含dll。根據我的經驗,代碼比dll更可靠,儘管dll的問題現在可能已經解決了。但採取有關btouch問題看看這個問題:

Exception System.InvalidCastException when calling a method bound with btouch that returns an object. MonoTouch bug?

如果你在建設的OBJ-C包裝然後在這裏問他們,並張貼一些代碼,我相信我還是具體問題/問題其他社區成員將能夠幫助你。

1

布魯斯,正如你所假設的,我在包裝C++代碼時遇到了問題。經過數小時的閱讀和嘗試,我無法包裝C++代碼。

無論如何,我設法創建了一個簡單的Obj-C庫,由一些虛擬類組成,然後將其導入到另一個庫中。這工作得很好。然而,按照相同的模式,我將C++ .a文件與.h文件一起包括進去(我不確定是否必須使用.h,因爲我們可以在構建選項中鏈接頭文件,對嗎?),當我編譯它時,很好,構建成功,但XCode沒有生成新的.a庫。

我添加了一個鏈接器標誌:-ObjC -lNameOfLib 構建鏈接中的C++標準庫類型是否必須是靜態的?還有默認情況下隱藏的符號?

如果我們可以一步一步地寫出tut,那將是一件好事,因爲有各種各樣的指令,但是我一直無法推動它。

我困惑了一下..

謝謝你們...