2013-08-22 64 views
0

我試圖在Objective-C應用程序中添加對iZotope(音頻效果)的支持。鏈接到Objective-C項目中的.a C++庫

在集成過程中,我遇到了一些與將iZotope C++庫鏈接到我的Xcode項目相關的問題。

由於這一點我沒有做過別的什麼事情比:

  • 添加庫(.a)中的具體目標> MyTargetName>構建階段>與庫鏈接二進制文件
  • 添加的頭文件該庫到PROJECT> MyProjectName>構建設置>搜索路徑>標題搜索路徑

我還沒有寫任何代碼,根本沒有。我現在的目標是讓我的項目進行編譯,就像在添加庫之前一樣。

這裏是編譯器輸出(https://gist.github.com/dornad/6310107)的鏈接。對我來說,似乎Xcode不知道C++ std庫,所以它失敗壯觀。

任何想法?

+0

對於新庫,您還需要添加庫搜索路徑。該屬性緊靠標題搜索路徑。從編譯器的角度來看,你需要一個「-l」標誌來指定文件名,你已經通過將它放在Link Binaries with Libraries中來完成,你還需要「-L」來告訴編譯器在哪裏搜索該庫因此庫搜索路徑屬性。 – Kuoni

+0

我不確定我在追隨。所以如果我的文件是libCoreFXSim.a,我需要在庫搜索路徑下添加-LlibCoreFXSim,對吧? – dornad

+0

對不起,我困惑你。如果您的XCodeProject旁邊有一個名爲CoreFX的文件夾,並且其中有一個名爲「libCoreFXSim.a」的庫,您可以將「$(SRCROOT)/ CoreFX」添加到**庫搜索路徑**中。 SRCROOT和其他變量記錄在[這裏](https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html)。這樣XCode會在尋找你的庫時想到在那個文件夾中搜索。 – Kuoni

回答

0

無法找到標準C++庫。可能您的項目文件的擴展名是.m而不是.mm,這是編譯C++所必需的。

+0

我正在閱讀有關在C++庫中創建Objective-C包裝的信息。我想保留文件原樣(.m),而不是切換到.mm,如下所述:http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++ – dornad

+0

或者說,我可以在一個項目中保存.mm和.m的混合嗎?即圍繞C++庫的包裝將是Objective-C++,而項目的其餘部分將保持原樣? – dornad

+0

是的,你可以,這就是我在Cocos2d-x的項目中所做的。當我真的需要純粹的Obj-C代碼時,我主要有CPP文件,一些.MM作爲橋樑(混合使用Obj-C的C++)和幾個.M文件。 .M用Objective-C編譯器編譯,而.MM用Objective-C++編譯器編譯。 Objective-C編譯器不瞭解標準C++庫。 – Kuoni