1

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)

1 Answer 1

3

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.