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复制到开发板中解决问题

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