Ubuntu16.04移植opencv4.1.1到海思3559A

一. 安裝海思的交叉編譯環境,具體見海思的手冊《Hi3559A╱C V100 SDK 安裝及升級使用說明.pdf》,安裝好的交叉編譯工具在/opt/hisi-linux/x86-arm/aarch64-himix100-linux/

二. 下載opencv4.1.1, https://www.opencv.org/releases.html

三. 解壓,並創建編譯目錄[Build],並進入編譯目錄

unzip opencv-4.1.1.zip
cd opencv-4.1.1
mkdir build
cd build

四. 安裝cmake-gui

apt-get install cmake-gui

五. 配置編譯選項

cmake-gui

  在彈出的編譯選項中, 操作如下:
  1. Where is the source code:選opencv4.1.1源碼所在目錄,如:/home/opencv-4.1.1
  2. Where to build the binaries:選編譯目錄,如/home/opencv4.1.1/build
  3. Configure-->Specify options for cross-compiling-->Next
  4. Operating System可填arm-linux, Version和Processor不用填
  5. Compilers中C和C++分別填安裝的交叉編譯工具,如aarch64-himix100-linux-gcc,aarch64-himix100-linux-g++
  6. 點[Finish]
  7. CMAKE_INSTALL_PREFIX設置爲安裝目錄,如/usr/local
  8. 點[Advance],設置CMAKE_CXX_FLAGS=-fPIC, CMAKE_C_FLAGS=-fPIC,CMAKE_EXE_LINKER_FLAGS=-lpthread -ldl
  9. 點[Configure]-->[Generate],關閉cmake-gui

注:編譯出來的共享庫依賴會使用相對路徑導致程序執行時找不到庫文件,可以用readelf -d libopencv_core.so來查看Shared library是否有../之類的路徑,經測試直接使用cmake配置可以解決此問題

#!/bin/sh
 
cmake -D CMAKE_BUILD_TYPE=RELEASE  \
	-D CMAKE_C_COMPILER=aarch64-himix100-linux-gcc \
	-D CMAKE_CXX_COMPILER=aarch64-himix100-linux-g++ \
	-D BUILD_CUDA_STUBS=OFF \
	-D BUILD_DOCS=OFF \
	-D BUILD_EXAMPLES=OFF \
	-D BUILD_IPP_IW=OFF \
	-D BUILD_ITT=OFF \
	-D BUILD_JASPER=OFF \
	-D BUILD_JAVA=OFF \
	-D BUILD_JPEG=ON \
	-D BUILD_OPENEXR=OFF \
	-D BUILD_PACKAGE=ON \
	-D BUILD_PERF_TESTS=OFF \
	-D BUILD_PNG=OFF \
	-D BUILD_SHARED_LIBS=ON \
	-D BUILD_TBB=OFF \
	-D BUILD_TESTS=OFF \
	-D BUILD_TIFF=OFF \
	-D BUILD_USE_SYMLINKS=OFF \
	-D BUILD_WEBP=OFF \
	-D BUILD_WITH_DYNAMIC_IPP=OFF \
	-D BUILD_ZLIB=OFF \
	-D BUILD_opencv_apps=OFF \
	-D BUILD_opencv_calib3d=ON \
	-D BUILD_opencv_core=ON \
	-D BUILD_opencv_dnn=ON \
	-D BUILD_opencv_features2d=ON \
	-D BUILD_opencv_flann=ON \
	-D BUILD_opencv_gapi=ON \
	-D BUILD_opencv_highgui=ON \
	-D BUILD_opencv_imgcodecs=ON \
	-D BUILD_opencv_imgproc=ON \
	-D BUILD_opencv_java_bindings_generator=OFF \
	-D BUILD_opencv_js=OFF \
	-D BUILD_opencv_ml=ON \
	-D BUILD_opencv_objdetect=ON \
	-D BUILD_opencv_photo=ON \
	-D BUILD_opencv_python_bindings_generator=OFF \
	-D BUILD_opencv_python_tests=OFF \
	-D BUILD_opencv_stitching=ON \
	-D BUILD_opencv_ts=ON \
	-D BUILD_opencv_video=ON \
	-D BUILD_opencv_videoio=ON \
	-D BUILD_opencv_world=ON \
	-D CMAKE_BUILD_TYPE=RELEASE \
	-D CMAKE_CXX_FLAGS=-fPIC \
	-D CMAKE_C_FLAGS=-fPIC \
	-D CMAKE_EXE_LINKER_FLAGS='-lpthread -ldl' \
	-D CMAKE_INSTALL_PREFIX=/usr/local  \
	-D ENABLE_PIC=ON \
	-D WITH_1394=OFF \
	-D WITH_ADE=OFF \
	-D WITH_ARAVIS=OFF \
	-D WITH_ARITH_DEC=ON \
	-D WITH_ARITH_ENC=ON \
	-D WITH_CLP=OFF \
	-D WITH_CUBLAS=OFF \
	-D WITH_CUDA=OFF \
	-D WITH_CUFFT=OFF \
	-D WITH_EIGEN=OFF \
	-D WITH_FFMPEG=ON \
	-D WITH_GDAL=OFF \
	-D WITH_GDCM=OFF \
	-D WITH_GPHOTO2=OFF \
	-D WITH_GSTREAMER=ON \
	-D WITH_GSTREAMER_0_10=OFF \
	-D WITH_GTK=OFF \
	-D WITH_GTK_2_X=OFF \
	-D WITH_HALIDE=OFF \
	-D WITH_HPX=OFF \
	-D WITH_IMGCODEC_HDR=ON \
	-D WITH_IMGCODEC_PFM=ON \
	-D WITH_IMGCODEC_PXM=ON \
	-D WITH_IMGCODEC_SUNRASTER=ON \
	-D WITH_INF_ENGINE=OFF \
	-D WITH_IPP=OFF \
	-D WITH_ITT=OFF \
	-D WITH_JASPER=OFF \
	-D WITH_JPEG=ON \
	-D WITH_LAPACK=ON \
	-D WITH_LIBREALSENSE=OFF \
	-D WITH_MFX=OFF \
	-D WITH_NVCUVID=OFF \
	-D WITH_OPENCL=OFF \
	-D WITH_OPENCLAMDBLAS=OFF \
	-D WITH_OPENCLAMDFFT=OFF \
	-D WITH_OPENCL_SVM=OFF \
	-D WITH_OPENEXR=OFF \
	-D WITH_OPENGL=OFF \
	-D WITH_OPENMP=OFF \
	-D WITH_OPENNNI=OFF \
	-D WITH_OPENNNI2=OFF \
	-D WITH_OPENVX=OFF \
	-D WITH_PNG=OFF \
	-D WITH_PROTOBUF=ON \
	-D WITH_PTHREADS_PF=ON \
	-D WITH_PVAPI=OFF \
	-D WITH_QT=OFF \
	-D WITH_QUIRC=OFF \
	-D WITH_TBB=OFF \
	-D WITH_TIFF=OFF \
	-D WITH_V4L=ON \
	-D WITH_VA=OFF \
	-D WITH_VA_INTEL=OFF \
	-D WITH_VTK=ON \
	-D WITH_VULKAN=OFF \
	-D WITH_WEBP=OFF \
	-D WITH_XIMEA=OFF \
	-D WITH_XINE=OFF \
	-D ZLIB_INCLUDE_DIR= \
	-D ZLIB_LIBRARY_RELEASE= \
	..

六. 編譯

make -j32

七. 安裝

make install

八. 在/usr/local/include目錄中可以看到產生了相關的頭文件, 以及/usr/local/lib目錄產生了相關的庫文件,通過以下命令可以列出文件信息,檢測是否爲ARM文件

file libopencv_core.so

九. 把編譯好的so文件拷貝到目標機器的/usr/local/lib/目錄

tar -cvf opencv411.tar.bz2 opencv411/

  注: 不要用zip打包, 否則快捷方式有問題,設備上解壓用tar -xvf opencv411.tar.bz2

十. 程序執行出錯:relocation error: ./libopencv_world.so: symbol _ZTINSt13__future_base12_Result_baseE, version GLIBCXX_3.4.23 not defined in file libstdc++.so.6 with link time reference,是開發板上的libstdc++.so.6版本低造成的,把交叉編譯工具鏈中的libstdc++.so.6複製到開發板中解決問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章