私は OpenCV を使用していくつかのコンピューター ビジョン コードに取り組んでおり、CMake を使用して OpenCV チュートリアル コードをコンパイルすることで OpenCV を実行したいと考えていました。基本的な display_image プログラムをコンパイルして実行しようとすると、正常にコンパイルされて実行されました (CMakeLists.txt ファイルを追加して cmake を実行し、ターミナルで make を実行しました。ただし、同じ手順を適用して他のいくつかのプログラムを実行すると、うまくいきませんでした。
次のエラーメッセージが表示されました
$ 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 で試したところ、同じ結果が得られましたが、自分のコードをより簡単に Linux システムに移植できるように、CMake を使用することを好みます。
次のリンクLinking OpenCV 2.3 program in Mac OS X Lion: symbol(s) not found for architecture x86_64にも同じ問題がありましたが、問題は解決されていないようです。
OSX Mavericks で CMake を使用してプログラムをコンパイルおよび実行する方法についてのヘルプをいただければ幸いです。