opencv_contrib: Opencv3.2 freetype module build failed in macOS10.12

  • OpenCV => 3.2
  • Operating System / Platform => macOS10.12
  • Compiler => XCode8.2
  • freetype version => 2.7
Undefined symbols for architecture x86_64:
  "_FT_Done_Face", referenced from:
      cv::freetype::FreeType2Impl::~FreeType2Impl() in freetype.o
      cv::freetype::FreeType2Impl::loadFontData(cv::String, int) in freetype.o
  "_FT_Done_FreeType", referenced from:
      cv::freetype::FreeType2Impl::~FreeType2Impl() in freetype.o
  "_FT_Init_FreeType", referenced from:
      cv::freetype::FreeType2Impl::FreeType2Impl() in freetype.o
      cv::freetype::FreeType2Impl::FreeType2Impl() in freetype.o
      cv::freetype::createFreeType2() in freetype.o
  "_FT_Load_Glyph", referenced from:
      cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.o
  "_FT_New_Face", referenced from:
      cv::freetype::FreeType2Impl::loadFontData(cv::String, int) in freetype.o
  "_FT_Outline_Decompose", referenced from:
      cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.o
  "_FT_Outline_Transform", referenced from:
      cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.o
  "_FT_Outline_Translate", referenced from:
      cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.o
  "_FT_Render_Glyph", referenced from:
      cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.o
  "_FT_Set_Pixel_Sizes", referenced from:
      cv::freetype::FreeType2Impl::putText(cv::_InputOutputArray const&, cv::String const&, cv::Point_<int>, int, cv::Scalar_<double>, int, int, bool) in freetype.o
  "_hb_buffer_add_utf8", referenced from:
      cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.o
  "_hb_buffer_create", referenced from:
      cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.o
  "_hb_buffer_destroy", referenced from:
      cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.o
  "_hb_buffer_get_glyph_infos", referenced from:
      cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.o
  "_hb_buffer_guess_segment_properties", referenced from:
      cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.o
  "_hb_font_destroy", referenced from:
      cv::freetype::FreeType2Impl::~FreeType2Impl() in freetype.o
      cv::freetype::FreeType2Impl::loadFontData(cv::String, int) in freetype.o
  "_hb_ft_font_create", referenced from:
      cv::freetype::FreeType2Impl::loadFontData(cv::String, int) in freetype.o
  "_hb_shape", referenced from:
      cv::freetype::FreeType2Impl::putTextBitmapBlend(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextBitmapMono(cv::_InputOutputArray const&) in freetype.o
      cv::freetype::FreeType2Impl::putTextOutline(cv::_InputOutputArray const&) in freetype.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

About this issue

  • Original URL
  • State: closed
  • Created 8 years ago
  • Comments: 16 (5 by maintainers)

Commits related to this issue

Most upvoted comments

on line 22 of opencv-freetype CMakefile, change ${freetype2_LIBRARIES} ${harfbuzz_LIBRARIES} to ${FREETYPE_LIBRARIES} ${HARFBUZZ_LIBRARIES}

I think ocv_define_module() line in opencv_contrib/module/freetype/CMakeFile.txt will cause this problem. FREETYPE_INCLUDE_DIRS and HARFBUZZ_INCLUDE_DIRS seems to be used with clang. But freetype2_LIBRARIES and harfbuzz_LIBRARIES do not seem to be used with ld.

ocv_define_module(freetype opencv_core opencv_imgproc PRIVATE_REQUIRED ${freetype2_LIBRARIES} ${harfbuzz_LIBRARIES} WRAP python) ocv_include_directories( ${FREETYPE_INCLUDE_DIRS} ${HARFBUZZ_INCLUDE_DIRS} )

Following works well in Ubuntu 16.04 LTS. Would you try this fix in macOS10.12 ?

ocv_define_module(freetype opencv_core opencv_imgproc PRIVATE_REQUIRED ${FREETYPE_LIBRARIES} ${HARFBUZZ_LIBRARIES} WRAP python)