2013-10-25 16 views
0

我正在使用OpenCV編寫一些計算機視覺代碼,並且想通過使用CMake編譯OpenCV教程代碼來嘗試運行OpenCV。當我嘗試編譯並運行基本的display_image程序時,它編譯成功並運行(我添加了一個CMakeLists.txt文件並運行cmake,然後在終端中創建。但是,當我使用相同的過程來運行其他一些程序時,它沒有工作在MacOSX中使用CMake在OpenCV 2.4.6.1中編寫代碼示例小牛

,我得到了以下錯誤消息

$ cmake . 

-- Configuring done 

-- Generating done 

-- Build files have been written to: /Users/censam/OpenCV/Vision Code/Examples/grabcut 

$ make 

Linking CXX executable grabcut 

Undefined symbols for architecture x86_64: 

    "cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, > 

std::__1::allocator<char> > const&, int)", referenced from: 

     _main in grabcut.cpp.o 

    "cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, > 

std::__1::allocator<char> > const&, cv::_InputArray const&)", referenced from: 

     GCApplication::showImage() const in grabcut.cpp.o 

    "cv::Exception::Exception(int, std::__1::basic_string<char, std::__1::char_traits<char>, > 

std::__1::allocator<char> > const&, std::__1::basic_string<char, > 

std::__1::char_traits<char>, std::__1::allocator<char> > const&, > 

std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > 

const&, int)", referenced from: 
     getBinMask(cv::Mat const&, cv::Mat&) in grabcut.cpp.o 

ld: symbol(s) not found for architecture x86_64 

clang: error: linker command failed with exit code 1 (use -v to see invocation) 

make[2]: *** [grabcut] Error 1 

make[1]: *** [CMakeFiles/grabcut.dir/all] Error 2 

make: *** [all] Error 2 

我的CMakeLists.txt文件如下:?

cmake_minimum_required(VERSION 2.8) 

project(grabcut) 

find_package(OpenCV REQUIRED) 

add_executable(grabcut grabcut.cpp ) 

target_link_libraries(grabcut ${OpenCV_LIBS}) 

我想知道爲什麼會這樣,我懷疑它可能是因爲在編譯期間CMake沒有鏈接所需的庫當我用XCode試過這個時,我得到了相同的結果,但我更喜歡使用CMake,這樣我就可以更輕鬆地將我的代碼移植到Linux系統。

我發現下面的鏈接Linking OpenCV 2.3 program in Mac OS X Lion: symbol(s) not found for architecture x86_64也有同樣的問題,但問題似乎並沒有得到解決。

任何關於如何讓我的程序在OSX Mavericks中使用CMake進行編譯和運行的幫助將非常感謝。

回答

0

將編譯器從clang更改爲g ++ - 4.2。

更詳細的解釋可以找到here