2013-04-18 140 views
12

我在Xcode中鏈接OpenCV時遇到問題。 我安裝的OpenCV採用BREW:在Xcode中連接OpenCV時體系結構x86_64錯誤的未定義符號

brew tap homebrew/science 
sudo brew install opencv 

我開始了一個新的Xcode命令行項目,添加/usr/local/lib/usr/local/include到庫和頭搜索路徑。 我還將pkg-config --libs opencv的輸出添加到other linker options

但是,當我嘗試編譯這個小樣本程序:

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

int main(int argc, char *argv[]) 
{ 
    cv::Mat test; 
    cv::namedWindow("Display window", CV_WINDOW_AUTOSIZE);// Create a window for display. 
    cv::waitKey(0);           // Wait for a keystroke in the window 
    return 0; 
} 

我得到下面的連接錯誤:

Undefined symbols for architecture x86_64: 
    "cv::namedWindow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from: 
     _main in main.o 
ld: symbol(s) not found for architecture x86_64 

但是我能夠編譯使用

在命令行程序
g++ `pkg-config --cflags --libs opencv` prog.cpp 

所以我認爲問題是Xcode的設置方式。但是我無法確定Xcode編譯和我的命令行參數之間究竟有什麼不同。

有沒有人知道這個錯誤的原因或有一個想法,我可以嘗試調查問題?

回答

27

在Xcode中創建一個新的組你的項目中,右鍵單擊它,選擇文件添加到項目,導航到/usr/local/lib文件夾並添加下列基本庫:

libopencv_core.dylib, libopencv_ml.dylib, libopencv_video.dylib

在以前的版本的OpenCV的庫名稱可能是:

libcxcore.dylib, libcvaux.dylib, libcv.dylib, libhighgui.dylib, libml.dylib

(這些庫可能位於另一個路徑,具體取決於您用來安裝的方法OpenCV的Mac上)

編輯:

如果你是包括動態庫的鏈接階段爲OP解釋上面的行不應該是必要的。

通過C++標準庫選擇項目,轉到生成設置標籤,過濾器,並設置此參數的libstdC++(GNU C++標準庫)

+0

這將產生同樣的錯誤。我的圖書館被命名稍有不同。 'libopencv_core.dylib'但我不認爲這是一個問題。另外,它應該有什麼區別我如何添加它們?使用「其他鏈接器選項」,我嘗試儘可能地重新創建我的命令行版本。有沒有一些方法來檢查xcode是否實際使用這些庫進行鏈接? – sietschie

+0

@sietschie看到我編輯的答案,我已經添加了另一個可能導致此問題的Xcode設置。 –

+3

使用'libstdC++'解決了我的問題。 – sietschie

8

我已經將生成設置 - > C++標準庫設置爲編譯器默認值。錯誤消失了。

+0

謝謝,我只是遇到了這個問題。這爲我解決了它! –

+0

libstdC++沒有爲我工作,但編譯器默認沒有 –

0

對於我來說,我使用OpenCV的在Xcode的iOS和我通過使用通過POD OpenCV的安裝,而不是解決錯誤離線opencv框架。

您可以通過添加下面的吊艙OpenCV的文字試試看:

pod 'OpenCV', '2.4.9' 
相關問題