我正在使用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進行編譯和運行的幫助將非常感謝。