Skip to Content
👋 嘿,欢迎使用 Auto Engine! 我们已经发布最新Beta版本 0.2.0 了解详情
博客251113 MacOS静态编译Opencv

MacOS静态编译Opencv

最近摸索了一下在MacOS下静态编译Opencv的流程,终于被我搞明白了,对于我一个对C/C++毫无经验的人来说,还是遇到了很多坎坷。

接下来介绍一下具体的构建过程,需要注意的是,这个编译的静态Opencv只使用于 Auto Engine Core(主要用于图像匹配)

1. 安装Opencv构建前置库

因为我们编译的Opencv需要支持图像操作,因此需要依赖下面几个库中所编译好的lib*.a文件

brew install libjpeg libpng libtiff zlib openblas

2. 下载Opencv

首先设置一下编译 Opencv 的前置环境变量

export OPENCV_VERSION=4.11.0 export DYLD_FALLBACK_LIBRARY_PATH=/Library/Developer/CommandLineTools/usr/lib/

下载并解压 Opencv

wget -O opencv.zip "https://github.com/opencv/opencv/archive/refs/tags/${OPENCV_VERSION}.zip" wget -O opencv_contrib.zip "https://github.com/opencv/opencv_contrib/archive/refs/tags/${OPENCV_VERSION}.zip" unzip opencv.zip && rm opencv.zip unzip opencv_contrib.zip && rm opencv_contrib.zip

3. 编译静态Opencv

这里我们需要设置刚刚使用homebrew安装 libjpeg libpng libtiff zlib openblas 的静态库

mkdir -p build && cd build && \ cmake -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DWITH_OPENBLAS=ON \ -DBLAS_LIBRARIES=/opt/homebrew/opt/openblas/lib/libopenblas.a \ -DLAPACK_LIBRARIES=/opt/homebrew/opt/openblas/lib/libopenblas.a \ -DWITH_ACCELERATE=OFF \ -DWITH_TEGRA=OFF \ -DCMAKE_OSX_ARCHITECTURES=arm64 \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DBUILD_DOCS=OFF \ -DBUILD_EXAMPLES=OFF \ -DBUILD_TESTS=OFF \ -DBUILD_PERF_TESTS=OFF \ -DWITH_PNG=ON \ -DPNG_INCLUDE_DIR=/usr/local/include \ -DPNG_LIBRARY=/usr/local/lib/libpng16.a \ -DWITH_JPEG=ON \ -DJPEG_INCLUDE_DIR=/usr/local/include \ -DJPEG_LIBRARY=/usr/local/lib/libjpeg.a \ -DWITH_TIFF=ON \ -DTIFF_INCLUDE_DIR=/usr/local/include \ -DTIFF_LIBRARY=/usr/local/lib/libtiff.a \ -DWITH_WEBP=OFF \ -DWITH_OPENJPEG=OFF \ -DWITH_JASPER=OFF \ -DWITH_OPENEXR=OFF \ -DWITH_V4L=OFF \ -DWITH_FFMPEG=OFF \ -DWITH_IPP=OFF \ -DWITH_OPENCL=OFF \ -DWITH_CAROTENE=OFF \ -DBUILD_opencv_java=OFF \ -DBUILD_opencv_python=OFF \ -DOPENCV_EXTRA_MODULES_PATH="opencv/opencv_contrib-${OPENCV_VERSION}/modules" \ "opencv/opencv-${OPENCV_VERSION}" cd opencv/build && sudo cmake --build . --target install --config Release --parallel 8 cd opencv/build && sudo cmake --install . --prefix /usr/local

4. 构建自己的应用

clang_dir="$(clang --print-search-dirs | awk -F= '/^libraries: =/ { print $2 }')" export OPENCV_LINK_LIBS=opencv_core,opencv_imgproc,opencv_imgcodecs,libittnotify,libjpeg,libpng,libtiff,zlib export OPENCV_LINK_PATHS=/usr/local/lib,/usr/local/lib/opencv4/3rdparty,$clang_dir/lib/darwin export OPENCV_INCLUDE_PATHS=/usr/local/include,/usr/local/include/opencv4 cargo build --release

5. 缺少依赖?

一般情况下,我们已经可以正常编译出自己的应用了,如果报错提示无法链接到libpng libjpeg …这些库的话,可以检查一下 /usr/local/lib/opencv4/3rdparty 这个路径下的文件。

确保存在lib*.a文件,而不是liblib*.a如果你遇到了这种情况,你可以手动重命名一下

ls -l /usr/local/lib/opencv4/3rdparty total 15176 -rw-r--r--@ 1 root wheel 347880 Nov 14 00:54 libade.a -rw-r--r--@ 1 root wheel 87512 Nov 14 00:54 libittnotify.a -rw-r--r--@ 1 root wheel 777952 Nov 14 00:54 libjpeg.a -rw-r--r--@ 1 root wheel 2624272 Nov 14 00:54 liblibprotobuf.a -rw-r--r--@ 1 root wheel 737872 Nov 13 23:12 liblibwebp.a -rw-r--r--@ 1 root wheel 88096 Nov 14 00:54 libopencv.sfm.correspondence.a -rw-r--r--@ 1 root wheel 1154496 Nov 14 00:54 libopencv.sfm.multiview.a -rw-r--r--@ 1 root wheel 7536 Nov 14 00:54 libopencv.sfm.numeric.a -rw-r--r--@ 1 root wheel 890464 Nov 14 00:54 libopencv.sfm.simple_pipeline.a -rw-r--r--@ 1 root wheel 311976 Nov 14 00:54 libpng.a -rw-r--r--@ 1 root wheel 614432 Nov 14 00:54 libtiff.a -rw-r--r--@ 1 root wheel 104800 Nov 14 00:54 libzlib.a
最后更新于: