簡體   English   中英

在XCode中包裝C ++庫

[英]Wrapping C++ library in XCode

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

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

之所以這樣做,是因為當我嘗試將C ++ lib導入MonoTouch時,由於名稱處理問題,我不斷收到WrongEntryPoint異常。 如果我錯了,請糾正我,但是我找不到找出亂碼的名稱,這取決於編譯器。

先感謝您

如果我錯了,請糾正我,但是我找不到找出亂碼的名稱,這取決於編譯器。

從技術上講,您可以。 許多編譯器共享相同的處理語法 ,也許是Itanium提供的最有用和最持久的禮物;-)

但是,當您更新C ++代碼時,將帶來自己的痛苦(例如,非原始類型,其他編譯器)和維護問題。

您最好通過以下方式服務:

  • 編寫一個ObjectiveC包裝器,並使用MonoTouch的btouch工具生成綁定;

  • 編寫C包裝程序並使用.NET p / invoke調用您的代碼;

這是您的選擇,但是如果您考慮在其他地方重用C ++ / C#代碼(例如Android的Mono),則可以重用C和p / invoke。

我絕對建議您將庫包裝在Obj-C庫中,然后使用btouch將庫導入MonoTouch。 我最近對實現Sybase數據庫引擎的C ++庫進行了此操作。 如果您看一下我的問題,在我就遇到的問題發表過幾次之后,您會發現很多與包裝C ++庫有關的問題。

具體來說,您可以查看以下問題:

鏈接到MonoTouch中的C ++本機庫

在Objective-C中包裝C ++庫不會隱藏C ++符號

帶有靜態庫的應用程序在模擬器上運行,但不在實際設備上運行

在MonoTouch中鏈接PhoneGap靜態庫時的未定義符號

鏈接器選項“僅鏈接所有程序集”和“僅鏈接SDK程序集”會導致第三方靜態庫中的未定義符號

我還將建議,如果您打算采用Obj-C包裝程序的方法,則可以讓btouch輸出代碼並將其包含在項目中,而不是包含來自btouch的dll。 根據我的經驗,盡管dll的問題現在可能已經解決了,但是代碼比dll更可靠地工作。 但是,請看一下有關btouch問題的問題:

調用與btouch綁定的方法返回對象時,異常System.InvalidCastException。 MonoTouch錯誤?

如果您在構建Obj-C包裝程序時遇到特定的問題/問題,請在此處詢問並發布一些代碼,我相信我或社區的其他成員將能夠為您提供幫助。

如您所料,布魯斯(Bruce)在包裝C ++代碼時遇到問題。 經過數小時的閱讀和嘗試,我無法包裝C ++代碼。

無論如何,我設法創建了一個由某些虛擬類組成的簡單Obj-C庫,然后將其導入到另一個庫中。 很好。 但是,按照相同的模式,我將C ++ .a文件與.h文件一起包含(我不確定.h是否是強制性的,因為我們可以在構建選項中鏈接頭文件,對嗎?),當我對其進行編譯時,很好,構建成功,但是XCode沒有產生新的.a庫。

我添加了鏈接器標志:-ObjC -lNameOfLib構建中的C ++標准庫類型-鏈接必須是靜態的嗎? 以及默認情況下隱藏的符號?

如果我們可以編寫循序漸進的教程,那就太好了,因為有大量的各種指令,但是我一直無法將它推到最后。

我有點困惑。

感謝大伙們...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM