我正在使用 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 尝试这个时,我得到了相同的结果,但我更喜欢使用 CMake,以便我可以更轻松地将我的代码移植到 linux 系统。
我发现以下链接Linking OpenCV 2.3 program in Mac OS X Lion: symbol(s) not found for architecture x86_64也有同样的问题,但问题似乎没有得到解决。
任何有关如何让我的程序在 OSX Mavericks 中使用 CMake 编译和运行的帮助将不胜感激。