2015年5月22日 星期五

Use OpenCV & OpenMP on OSX Yosemite 10.10.3 GNU GCC or LLVM/Clang ?

筆記文..

在遇到這問題之前,我已成功編譯且灌好歐噴屎V,直到昨天需要編譯一個使用了 OpenCV 和 OpenMP 的專案,問題就產生了!

我無法成功使用 gcc 在 osx 上編譯 OpenCV..所以之前是用系統預設的 clang,但 Yosemite 底下的 clang 似乎沒有支援 OpenMP 了,導致專案編譯時無法成功(即使灌了 OpenMP)

目前解法:

  1. 重新安裝 gcc 和 OpenMP
  2. brew uninstall gcc
    brew install open-mpi
    
    先移除原有的 gcc,brew install open-mpi 會安裝 gcc 和 openmp。

     
  1. 重新編譯  OpenCV
  2. 修改 path to opencv-2.4.10/cmake/OpenCVCompilerOptions.cmake
    set(OPENCV_EXTRA_FLAGS " -stdlib=libstdc++")
    set(OPENCV_EXTRA_C_FLAGS " -stdlib=libstdc++")
    set(OPENCV_EXTRA_CXX_FLAGS " -stdlib=libstdc++")
    set(OPENCV_EXTRA_EXE_LINKER_FLAGS " -stdlib=libstdc++")
    
    加上 -stdlib=libstdc++ 原因是現在 calng 預設使用 libc++,但 g++ 是 libstdc++,應該很清楚為何這麼做了!之後編譯專案時為了能用 OpemMP,選擇使用 g++ 那麼編譯 OpenCV 當然要選 g++ 用的 libstdc++ 囉!(改完後安裝方式應該都很清楚就不多說了,記得編譯使用 tbb 就不能用 OpenMP!我是選 tbb..)

     
  1. 修改專案使用的預設編譯器(CMakeLists.txt)
  2. set(CMAKE_C_COMPILER "/usr/local/Cellar/gcc/4.9.2_1/bin/gcc-4.9")
    set(CMAKE_CXX_COMPILER "/usr/local/Cellar/gcc/4.9.2_1/bin/g++-4.9")