2013-01-06 28 views
2

我想要的OpenCV最新版本添加到我的iOS項目,但是當我編譯,我得到約30鏈接錯誤iOS的鏈接錯誤:如何解決與OpenCV的

例子:

Undefined symbols for architecture i386: 
"cv::merge(std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::_OutputArray const&)", referenced from: 

我在一個帶有簡單視頻捕捉的虛擬應用程序中添加了OpenCV框架along with all the other required frameworks(按照鏈接中的教程),並且它非常完美。

我不確定爲什麼它可以在一個地方如此順利地工作,而不是在另一個地方。我唯一的想法是,我爲兩個應用程序之間的不同架構編譯,但我認爲我都瞄準armv7和armv7s。

任何想法可能導致鏈接錯誤?

+0

你的問題是不明確的 - 首先,你說你得到鏈接錯誤,那麼你繼續說,該框架的工作。您是否在每種情況下都使用相同版本的框架,並且您的項目都是新項目? – foundry

+0

有兩個項目:一個只是一個簡單的測試,一個通過我的整個應用程序。它在測試項目中有效,但是當我遵循相同的步驟時,就會出現鏈接錯誤。我認爲每種架構都支持不同的架構,但我無法弄清楚哪些/如何等。 – Jason

回答

13

檢查:(假設你使用LLVM編譯器)

目標>構建設置>蘋果LLVM編譯器4.1 - 語言> C++標準庫
嘗試選擇

libstdc++ (GNU C++ standard library)` 

然後嘗試切換到

libc++ (LLVM C++ standard library with C++11 support) 

libstdC++似乎適用於較舊版本的openCV,libC++正確適用於較新的版本。如果你將它設置錯誤(無論哪種方式),你會看到這些類型的錯誤。

如果不是原因,打開構建在每個項目設定並排檢查設置...

我已經通過這個最近對抗 - 看我的問題here,回答here和github示例here。 github項目包括幾天前從當前源編譯的opencv框架。現在,我正在編寫一個多目標示例,如果在10.6/XCode4.2或10.7/XCode4.4 +下編譯,它將鏈接到不同版本的框架。 [在GitHub上here]

更新

由於@mikewoz要求,您可能需要運行電流與opencv libstdc++保持與其他框架兼容。可以通過libstdc++兼容性來製作當前版本。有關詳情請參閱我的回答麥克的問題在這裏:

OpenCV 2.4.3+ with libstdc++ for iOS?

+0

非常感謝!你必須讓我的下午!它被設置爲「Compiler Default」,因此我將它改爲「libC++(支持C++ 11的LLVM C++標準庫)」,它工作正常! – Jason

+0

同意,對於當前的openCV 2.4.4,libC++是正確的選擇,它不是默認值。 – jimpic

+0

如果我們需要使用libstdC++,因爲其他第三方庫也在項目中,該怎麼辦?有沒有一種方法可以在沒有libC++/C++ 11支持的情況下構建最新的OpenCV?並回落到libstdC++? – mikewoz