Code.Town
Code.Town

Reputation: 1226

Adding OpenCV to iOS application

When I add OpenCV using the Hello World tutorial (see the link below) I get O Linker error. Am I missing anything?

http://docs.opencv.org/doc/tutorials/ios/hello/hello.html#opencvioshelloworld

Undefined symbols for architecture armv7:
  "std::string::operator=(char const*)", referenced from:
      cv::BmpDecoder::BmpDecoder() in opencv2(grfmt_bmp.o)
      cv::BmpEncoder::BmpEncoder() in opencv2(grfmt_bmp.o)
      cv::PxMEncoder::PxMEncoder() in opencv2(grfmt_pxm.o)
      cv::TiffEncoder::TiffEncoder() in opencv2(grfmt_tiff.o)
      cv::SunRasterDecoder::SunRasterDecoder() in opencv2(grfmt_sunras.o)
      cv::SunRasterEncoder::SunRasterEncoder() in opencv2(grfmt_sunras.o)
  "___cxa_pure_virtual", referenced from:
      vtable for cv::MatOp in opencv2(matop.o)
      vtable for cv::BaseImageDecoder in opencv2(grfmt_base.o)
      vtable for cv::BaseImageEncoder in opencv2(grfmt_base.o)
  "vtable for std::exception", referenced from:
      std::exception::exception() in opencv2(system.o)
      std::exception::exception(std::exception const&) in opencv2(system.o)
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "___cxa_allocate_exception", referenced from:
      cv::error(cv::Exception const&) in opencv2(system.o)
      cv::PxMDecoder::readHeader() in opencv2(grfmt_pxm.o)
      cv::RBaseStream::readBlock() in opencv2(bitstrm.o)
  "std::string::operator[](unsigned long) const", referenced from:
      cv::PxMDecoder::checkSignature(std::string const&) const in opencv2(grfmt_pxm.o)
  "std::string::size() const", referenced from:
      cv::Exception::formatMessage() in opencv2(system.o)
      cv::error(cv::Exception const&) in opencv2(system.o)
      cv::PxMDecoder::checkSignature(std::string const&) const in opencv2(grfmt_pxm.o)
      cv::BaseImageDecoder::signatureLength() const in opencv2(grfmt_base.o)
      cv::BaseImageDecoder::checkSignature(std::string const&) const in opencv2(grfmt_base.o)

Upvotes: 1

Views: 361

Answers (1)

Code.Town
Code.Town

Reputation: 1226

It looks like my project is not linking against the C++ runtime library. To link against the runtime library:

  1. Go to the "Build Phases" tab of the project.

  2. Choose the "Link Binary With Libraries" section.

  3. Click the "+" button at the bottom of the section.

  4. From the list that appears, choose either "libc++.dylib" for OpenCV 2.4.3, or "libstdc++.dylib" for OpenCV 2.4.2 and before.

  5. Rebuild, and everything should work.

Upvotes: 3

Related Questions