4

我創建了一個運行一些C++(OpenCV)代碼的Objective-C++項目。它運行良好,一切正常。但後來我決定將這些例程作爲子項目添加到我的MAIN PROJECT中,每當我嘗試使用子項目類時都會出錯。將Obj-C++子項目添加到Xcode Obj-C項目時遇到問題

的事情是,我的子項目使用.mm源文件,而我的主要項目只使用.M源文件:enter image description here

每次我嘗試分配一個類DyOpenCV(DyOpenCv *opencv = [DyOpenCv alloc]),我得到了很多錯誤:Compilation errors

這是一個合併Obj-C與Obj-Cpp項目的提示嗎? 是一個特殊的界面使用,一旦我試圖運行.mm文件從.m的?即使.mm文件來自子項目? 是否有必要將我的子項目的所有庫添加到我的項目中(我已經這樣做了)?

歡呼聲,

+0

看看那些缺少的符號。您必須鏈接到C++標準庫。將連接器從'clang'改爲'clang ++',它會正常工作。 – 2013-04-27 17:49:57

+0

它沒有工作,H2CO3。我實際上是在這個教程的方式:http://philjordan.eu/article/strategies-for-using-c++-in-objective-c-項目似乎教在這些情況下做什麼。如果它適用於我,我會在這裏回覆=) – marcelosalloum 2013-04-27 18:53:39

回答

7

您需要鏈接到C++標準庫。如果您的編譯源代碼階段包含任何C++文件,這通常會自動發生,但如果C++全部包含在靜態庫中,那麼您需要明確要求將其鏈接到最終的可執行文件。

檢查子項目的構建設置。尋找C++標準庫構建選項。如果它設置爲libC++(llvm標準庫),則將-lc++添加到應用程序的附加鏈接器標誌。如果它設置爲libstdC++(gnu庫),那麼將-lstdc++添加到您的應用程序的附加鏈接器標誌。

+0

我做到了,出現了一系列其他錯誤。在我的Obj-C項目中,到處都有'@property(nonatomic strong)...'行,因爲這個強大的東西出現了一個錯誤。我對這個解決方案更感興趣:http://philjordan.eu/article/strategies-for-using-c++-in-objective-c-projects,但是不能保證它能起作用。 – marcelosalloum 2013-04-28 21:38:02

+0

您確定只更改了鏈接器標誌嗎?你所描述的聽起來像是編譯問題,而不是鏈接(這是你的原始錯誤)。 – 2013-04-28 21:49:27

+0

你說得對。正如你所建議的那樣,我只是將'-lC++'添加到我的**其他鏈接器標記**並將我的**標準庫**更改爲'libC++'。 – marcelosalloum 2013-04-29 01:00:38