MacOS静态编译Opencv
最近摸索了一下在MacOS下静态编译Opencv的流程,终于被我搞明白了,对于我一个对C/C++毫无经验的人来说,还是遇到了很多坎坷。
接下来介绍一下具体的构建过程,需要注意的是,这个编译的静态Opencv只使用于 Auto Engine Core(主要用于图像匹配)
1. 安装Opencv构建前置库
因为我们编译的Opencv需要支持图像操作,因此需要依赖下面几个库中所编译好的lib*.a文件
brew install libjpeg libpng libtiff zlib openblas2. 下载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.zip3. 编译静态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/local4. 构建自己的应用
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 --release5. 缺少依赖?
一般情况下,我们已经可以正常编译出自己的应用了,如果报错提示无法链接到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最后更新于: