在遇到這問題之前,我已成功編譯且灌好歐噴屎V,直到昨天需要編譯一個使用了 OpenCV 和 OpenMP 的專案,問題就產生了!
我無法成功使用 gcc 在 osx 上編譯 OpenCV..所以之前是用系統預設的 clang,但 Yosemite 底下的 clang 似乎沒有支援 OpenMP 了,導致專案編譯時無法成功(即使灌了 OpenMP)
目前解法:
- 重新安裝 gcc 和 OpenMP
brew uninstall gcc brew install open-mpi先移除原有的 gcc,brew install open-mpi 會安裝 gcc 和 openmp。
- 重新編譯 OpenCV 修改 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..)
- 修改專案使用的預設編譯器(CMakeLists.txt)
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")