0

I was working on some computer vision code with OpenCV, and wanted to try running OpenCV by compiling the OpenCV tutorial code using CMake. When I tried to compile and run the basic display_image program, it compiled successfully and ran(I added a CMakeLists.txt file and ran cmake . and then make in Terminal. However, when I applied the same procedure to run a few other programs, it didn't work.

I got the following error message

 $ 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

My CMakeLists.txt file is as follows:

cmake_minimum_required(VERSION 2.8)

project( grabcut )

find_package( OpenCV REQUIRED )

add_executable( grabcut grabcut.cpp  )

target_link_libraries( grabcut ${OpenCV_LIBS} )

May I know why this happens?I suspect it could be because CMake hasn't linked the required libraries during compiling. When I tried this with XCode, I got the same result, but I prefer to use CMake so that I can port my code over to linux systems more easily.

I found the following link Linking OpenCV 2.3 program in Mac OS X Lion: symbol(s) not found for architecture x86_64 also had the same problem, but the issue doesn't seem to have been resolved.

Any help on how I can get my program to compile and run using CMake in OSX Mavericks will be much appreciated.

Community
  • 1
  • 1
Sriharsha
  • 315
  • 1
  • 3
  • 7

1 Answers1

0

Change the compiler from clang to g++-4.2.

A more detailed explain could be find here.

Community
  • 1
  • 1