1.1 安裝lib依賴
必須要安裝的依賴,通過命令安裝:
[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
如果需要其他的功能,可選安裝:
[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
1.2 安裝ant依賴
注:此前因沒安裝ant,導致構建靜態jni庫時總是不生成,make也不報錯,必須安裝!
Apache ant官方下載最新版 https://ant.apache.org/bindownload.cgi
2.1 安裝OpenCV(這里使用4.1.1)
下載Opencv安裝包,OpenCV官網下載 只有Windows和Android等
若想構建Centos版只能從源碼構建 Github源碼下載
解壓:
unzip opencv-4.1.1.zip
2.2 在解壓的主目錄里新建build空目錄用來存放編譯文件(因OpenCV4.x要求不允許生成在有源碼的目錄):
cd opencv-4.1.1
mkdir build
cd build
【注: cmake/make編譯的路徑不要包含中文,否則可能導致一些奇葩問題,親身踩坑!】
報錯:
...
[ 43%] Linking CXX static library ../lib/liblibprotobuf.a
[ 43%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/matrix_c.cpp.o
[ 43%] Building target libprotobuf xxx CMakefile (:163 all)
2.3.1 然后在新建的這個文件里運行cmake(為了減少升級cmake2到cmake3源碼安裝的折騰,直接可在線安裝 yum install -y cmake3):
cmake3 -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTS=OFF -DBUILD_opencv_java=ON -DCMAKE_INSTALL_PREFIX=/usr/local ..
2.3.2 更多可選參數,如:
-DCMAKE_BUILD_TYPE=RELEASE
-DWITH_OPENCL=OFF
-DWITH_CUDA=OFF
-DWITH_OPENCL=ON
-DWITH_OPENGL=OFF
-DWITH_OPENMP=OFF
-DWITH_OPENNNI=OFF
-DWITH_OPENNNI2=OFF
-DWITH_OPENVX=OFF
-DWITH_VULKAN=OFF
-DBUILD_CUDA_STUBS=OFF
-DBUILD_DOCS=OFF
-DBUILD_EXAMPLES=OFF
-DBUILD_IPP_IW=ON
-DBUILD_ITT=ON
-DBUILD_JASPER=ON
-DBUILD_JAVA=OFF
-DBUILD_JPEG=ON
-DBUILD_OPENEXR=ON
-DBUILD_PACKAGE=ON
-DBUILD_PERF_TESTS=OFF
-DBUILD_PNG=ON
-DBUILD_PROTOBUF=ON
-DBUILD_SHARED_LIBS=ON
-DBUILD_TBB=OFF
-DBUILD_TESTS=ON
-DBUILD_TIFF=ON
-DBUILD_USE_SYMLINKS=OFF
-DBUILD_WEBP=ON
-DBUILD_WITH_DEBUG_INFO=OFF
-DBUILD_WITH_DYNAMIC_IPP=OFF
-DBUILD_ZLIB=ON
-DBUILD_opencv_apps=OFF
-DBUILD_opencv_calib3d=OFF
-DBUILD_opencv_core=ON
-DBUILD_opencv_dnn=ON
-DBUILD_opencv_features2d=OFF
-DBUILD_opencv_flann=OFF
-DBUILD_opencv_gapi=ON
-DBUILD_opencv_highgui=OFF
-DBUILD_opencv_imgcodecs=ON
-DBUILD_opencv_imgproc=ON
-DBUILD_opencv_java_bindings_generator=OFF
-DBUILD_opencv_js=OFF
-DBUILD_opencv_ml=OFF
-DBUILD_opencv_objdetect=OFF
-DBUILD_opencv_photo=OFF
-DBUILD_opencv_python2=OFF
-DBUILD_opencv_python3=OFF
-DBUILD_opencv_python_bindings_generator=OFF
-DBUILD_opencv_stitching=OFF
-DBUILD_opencv_ts=OFF
-DBUILD_opencv_video=OFF
-DBUILD_opencv_videoio=OFF
-DBUILD_opencv_world=OFF
-DCMAKE_INSTALL_PREFIX=./install
如上參數表示,只關注core、dnn、imgcodecs、imgproc、gapi模塊。
若需要編譯擴展模塊,則還需要加入:
-DOPENCV_EXTRA_MODULES_PATH=/path/opencv_contrib/modules
如果是嵌入式設備,還需要加入相應的編譯工具鏈和其他一些配置,如下所示:
-DCMAKE_C_COMPILER=/path/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc -DCMAKE_CXX_COMPILER=/path/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-g++ -DCMAKE_CXX_FLAGS=-fPIC -DCMAKE_C_FLAGS=-fPIC -DCMAKE_EXE_LINKER_FLAGS=-lpthread -lrt -ldl
2.4 OpenCV4默認不生成.pc文件,OPENCV_GENERATE_PKGCONFIG=ON才會生成。
之后就是編譯和安裝了,我的電腦是四核八線程,可以運行make,若不想編譯時時間太長影響工作,四核的PC可用 make -j7。
make -j7
sudo make install
FQA:
問題1:使用clion或者CMake命令時報錯,錯誤消息:CMake Error at CMakeLists.txt:11 (message):FATAL: In-source builds are not allowed.You should create a separate directory for build files.
解決方案:
進到opencv主目錄
rm CMakeCache.txt
mkdir build
cd build
cmake ..
make
問題2:編譯成功后,如將 libopencv_xxx.jar和libopencv_xxx.so拷貝只Java工程運行,報錯消息:
libopencv_core.so.xxx : cannot open shared object file libopencv_dnn.so.xxx: no such file or directory
解決方案:
檢查編譯參數是否使用靜態編譯,因為動態編譯生成的so文件會使用編譯的時候的系統絕對路徑,要想在java工程動態引用,必須使用靜態編譯,顯示指定參數:-DBUILD_SHARED_LIBS=OFF(默認是ON)
已在應用于本人一個開源項目:
參考1:https://github.com/wl4g/super-devops-tool-opencv-native
參考2:https://github.com/wl4g/super-devops/tree/master/super-devops-tool/super-devops-tool-opencv