上篇介绍完,我们就看到里面已经搭建好OpenCV库了。里面搭载的是OpenCV4.4.0的版本。但是要使用起来还是需要我们在虚拟机这边也有同样的库。所以我选择再编译一次,同时也是熟悉下Ubuntu系统中的操作。
我们需要到OpenCV官网下载https://opencv.org/releases/page/2/ releases的代码,找到里面的源码就行了。
放到Ubuntu下进行解压就能得到我们的源码目录,然后可以再新建一个编译目录,我的名字就是build。
之后就是安装CMAKE工具
指令如下:
sudo apt-get install cmake cmake-qt-gui cmake-curses-gui
安装好之后使用cmake-gui启动我们图形的配置界面。
需要选择好我们的源码路径,构建路径。开始没有下面红色内容。
之后按照上面步骤进行操作。
之后就是构建的编译工具链的选择了。这里好像是不可以选择yocto编译出来的工具链,使用其他的工具链。这里具体我也不知道应该选择什么,不过看网上的介绍。同样是IMX8的开发使用了这个连接下的工具。https://releases.linaro.org/components/toolchain/binaries/
这里面也是有很多的选择的,我选择了最新的版本的。
因为我们是64位的机器,所以交叉编译工具链也是64位的。下载完成后就是解压到我们虚拟机中。并且在环境中配置好。
我在/etc/profile下已经修改好了。
当我们选择完后就会有一个初步的构建。如上。然后就会报红,这些都是没关系的,我们接着修改。
在 CMAKE_EXE_LINKER_FLAGS 处添加上-lpthread -lrt -ldl。添加这些是是指定依赖库的链接参数。
然后再search中搜索zlib和png出现的都勾选上,不然后面make会报错。
之后把我们的安装路径选择下,基本到这里就配置完成了。再此点击Configure。
输出窗口没错误的时候我们就能到build文件下了,准备开始构建了。
里面已经很多文件了。不过这里暂时还不能编译需要先修改几个文件,有些事4.4.0这个版本特有的报错。
首先在源码目录 opencv-4.4.0/3rdparty/protobuf/src/google/protobuf/stubs/common.cc 这个文件下添加#define HAVE_PTHREAD 宏定义才可以编译的过。
编译可能会报错“libopencv_imgcodecs.so.4.1.0: undefined reference to png_init_filter_functions_neon“
修改opencv4.4.0/3rdparty/libpng/CMakeLists.txt,在最前面添加
SET(ARM 1)
SET(ENABLE_NEON 1)
接下来就可以make了。
编译完成后需要执行make install 这样就完成整个编译了。
├── bin
│ ├── opencv_annotation
│ ├── opencv_interactive-calibration
│ ├── opencv_version
│ ├── opencv_visualisation
│ └── setup_vars_opencv4.sh
├── include
│ └── opencv4
│ └── opencv2
│ ├── calib3d
│ │ ├── calib3d_c.h
│ │ └── calib3d.hpp
│ ├── calib3d.hpp
│ ├── core
│ │ ├── affine.hpp
│ │ ├── async.hpp
│ │ ├── base.hpp
│ │ ├── bindings_utils.hpp
│ │ ├── bufferpool.hpp
│ │ ├── check.hpp
│ │ ├── core_c.h
│ │ ├── core.hpp
│ │ ├── cuda
│ │ │ ├── block.hpp
│ │ │ ├── border_interpolate.hpp
│ │ │ ├── color.hpp
│ │ │ ├── common.hpp
│ │ │ ├── datamov_utils.hpp
│ │ │ ├── detail
│ │ │ │ ├── color_detail.hpp
│ │ │ │ ├── reduce.hpp
│ │ │ │ ├── reduce_key_val.hpp
│ │ │ │ ├── transform_detail.hpp
│ │ │ │ ├── type_traits_detail.hpp
│ │ │ │ └── vec_distance_detail.hpp
│ │ │ ├── dynamic_smem.hpp
│ │ │ ├── emulation.hpp
│ │ │ ├── filters.hpp
│ │ │ ├── funcattrib.hpp
│ │ │ ├── functional.hpp
│ │ │ ├── limits.hpp
│ │ │ ├── reduce.hpp
│ │ │ ├── saturate_cast.hpp
│ │ │ ├── scan.hpp
│ │ │ ├── simd_functions.hpp
│ │ │ ├── transform.hpp
│ │ │ ├── type_traits.hpp
│ │ │ ├── utility.hpp
│ │ │ ├── vec_distance.hpp
│ │ │ ├── vec_math.hpp
│ │ │ ├── vec_traits.hpp
│ │ │ ├── warp.hpp
│ │ │ ├── warp_reduce.hpp
│ │ │ └── warp_shuffle.hpp
│ │ ├── cuda.hpp
│ │ ├── cuda.inl.hpp
│ │ ├── cuda_stream_accessor.hpp
│ │ ├── cuda_types.hpp
│ │ ├── cv_cpu_dispatch.h
│ │ ├── cv_cpu_helper.h
│ │ ├── cvdef.h
│ │ ├── cvstd.hpp
│ │ ├── cvstd.inl.hpp
│ │ ├── cvstd_wrapper.hpp
│ │ ├── detail
│ │ │ ├── async_promise.hpp
│ │ │ └── exception_ptr.hpp
│ │ ├── directx.hpp
│ │ ├── eigen.hpp
│ │ ├── fast_math.hpp
│ │ ├── hal
│ │ │ ├── hal.hpp
│ │ │ ├── interface.h
│ │ │ ├── intrin_avx512.hpp
│ │ │ ├── intrin_avx.hpp
│ │ │ ├── intrin_cpp.hpp
│ │ │ ├── intrin_forward.hpp
│ │ │ ├── intrin.hpp
│ │ │ ├── intrin_msa.hpp
│ │ │ ├── intrin_neon.hpp
│ │ │ ├── intrin_sse_em.hpp
│ │ │ ├── intrin_sse.hpp
│ │ │ ├── intrin_vsx.hpp
│ │ │ ├── intrin_wasm.hpp
│ │ │ ├── msa_macros.h
│ │ │ └── simd_utils.impl.hpp
│ │ ├── mat.hpp
│ │ ├── mat.inl.hpp
│ │ ├── matx.hpp
│ │ ├── neon_utils.hpp
│ │ ├── ocl_genbase.hpp
│ │ ├── ocl.hpp
│ │ ├── opencl
│ │ │ ├── ocl_defs.hpp
│ │ │ ├── opencl_info.hpp
│ │ │ ├── opencl_svm.hpp
│ │ │ └── runtime
│ │ │ ├── autogenerated
│ │ │ │ ├── opencl_clamdblas.hpp
│ │ │ │ ├── opencl_clamdfft.hpp
│ │ │ │ ├── opencl_core.hpp
│ │ │ │ ├── opencl_core_wrappers.hpp
│ │ │ │ ├── opencl_gl.hpp
│ │ │ │ └── opencl_gl_wrappers.hpp
│ │ │ ├── opencl_clamdblas.hpp
│ │ │ ├── opencl_clamdfft.hpp
│ │ │ ├── opencl_core.hpp
│ │ │ ├── opencl_core_wrappers.hpp
│ │ │ ├── opencl_gl.hpp
│ │ │ ├── opencl_gl_wrappers.hpp
│ │ │ ├── opencl_svm_20.hpp
│ │ │ ├── opencl_svm_definitions.hpp
│ │ │ └── opencl_svm_hsa_extension.hpp
│ │ ├── opengl.hpp
│ │ ├── operations.hpp
│ │ ├── optim.hpp
│ │ ├── ovx.hpp
│ │ ├── persistence.hpp
│ │ ├── saturate.hpp
│ │ ├── simd_intrinsics.hpp
│ │ ├── softfloat.hpp
│ │ ├── sse_utils.hpp
│ │ ├── traits.hpp
│ │ ├── types_c.h
│ │ ├── types.hpp
│ │ ├── utility.hpp
│ │ ├── utils
│ │ │ ├── allocator_stats.hpp
│ │ │ ├── allocator_stats.impl.hpp
│ │ │ ├── filesystem.hpp
│ │ │ ├── instrumentation.hpp
│ │ │ ├── logger.defines.hpp
│ │ │ ├── logger.hpp
│ │ │ ├── logtag.hpp
│ │ │ ├── tls.hpp
│ │ │ └── trace.hpp
│ │ ├── va_intel.hpp
│ │ ├── version.hpp
│ │ └── vsx_utils.hpp
│ ├── core.hpp
│ ├── cvconfig.h
│ ├── dnn
│ │ ├── all_layers.hpp
│ │ ├── dict.hpp
│ │ ├── dnn.hpp
│ │ ├── dnn.inl.hpp
│ │ ├── layer.details.hpp
│ │ ├── layer.hpp
│ │ ├── shape_utils.hpp
│ │ ├── utils
│ │ │ └── inference_engine.hpp
│ │ └── version.hpp
│ ├── dnn.hpp
│ ├── features2d
│ │ ├── features2d.hpp
│ │ └── hal
│ │ └── interface.h
│ ├── features2d.hpp
│ ├── flann
│ │ ├── all_indices.h
│ │ ├── allocator.h
│ │ ├── any.h
│ │ ├── autotuned_index.h
│ │ ├── composite_index.h
│ │ ├── config.h
│ │ ├── defines.h
│ │ ├── dist.h
│ │ ├── dummy.h
│ │ ├── dynamic_bitset.h
│ │ ├── flann_base.hpp
│ │ ├── flann.hpp
│ │ ├── general.h
│ │ ├── ground_truth.h
│ │ ├── hdf5.h
│ │ ├── heap.h
│ │ ├── hierarchical_clustering_index.h
│ │ ├── index_testing.h
│ │ ├── kdtree_index.h
│ │ ├── kdtree_single_index.h
│ │ ├── kmeans_index.h
│ │ ├── linear_index.h
│ │ ├── logger.h
│ │ ├── lsh_index.h
│ │ ├── lsh_table.h
│ │ ├── matrix.h
│ │ ├── miniflann.hpp
│ │ ├── nn_index.h
│ │ ├── object_factory.h
│ │ ├── params.h
│ │ ├── random.h
│ │ ├── result_set.h
│ │ ├── sampling.h
│ │ ├── saving.h
│ │ ├── simplex_downhill.h
│ │ └── timer.h
│ ├── flann.hpp
│ ├── gapi
│ │ ├── core.hpp
│ │ ├── cpu
│ │ │ ├── core.hpp
│ │ │ ├── gcpukernel.hpp
│ │ │ ├── imgproc.hpp
│ │ │ └── video.hpp
│ │ ├── fluid
│ │ │ ├── core.hpp
│ │ │ ├── gfluidbuffer.hpp
│ │ │ ├── gfluidkernel.hpp
│ │ │ └── imgproc.hpp
│ │ ├── garg.hpp
│ │ ├── garray.hpp
│ │ ├── gasync_context.hpp
│ │ ├── gcall.hpp
│ │ ├── gcommon.hpp
│ │ ├── gcompiled_async.hpp
│ │ ├── gcompiled.hpp
│ │ ├── gcompoundkernel.hpp
│ │ ├── gcomputation_async.hpp
│ │ ├── gcomputation.hpp
│ │ ├── gkernel.hpp
│ │ ├── gmat.hpp
│ │ ├── gmetaarg.hpp
│ │ ├── gopaque.hpp
│ │ ├── gproto.hpp
│ │ ├── gpu
│ │ │ ├── core.hpp
│ │ │ ├── ggpukernel.hpp
│ │ │ └── imgproc.hpp
│ │ ├── gscalar.hpp
│ │ ├── gstreaming.hpp
│ │ ├── gtransform.hpp
│ │ ├── gtyped.hpp
│ │ ├── gtype_traits.hpp
│ │ ├── imgproc.hpp
│ │ ├── infer
│ │ │ └── ie.hpp
│ │ ├── infer.hpp
│ │ ├── ocl
│ │ │ ├── core.hpp
│ │ │ ├── goclkernel.hpp
│ │ │ └── imgproc.hpp
│ │ ├── opencv_includes.hpp
│ │ ├── operators.hpp
│ │ ├── own
│ │ │ ├── assert.hpp
│ │ │ ├── convert.hpp
│ │ │ ├── cvdefs.hpp
│ │ │ ├── exports.hpp
│ │ │ ├── mat.hpp
│ │ │ ├── saturate.hpp
│ │ │ ├── scalar.hpp
│ │ │ └── types.hpp
│ │ ├── plaidml
│ │ │ ├── core.hpp
│ │ │ ├── gplaidmlkernel.hpp
│ │ │ └── plaidml.hpp
│ │ ├── render
│ │ │ └── render.hpp
│ │ ├── render.hpp
│ │ ├── s11n.hpp
│ │ ├── streaming
│ │ │ ├── cap.hpp
│ │ │ └── source.hpp
│ │ ├── util
│ │ │ ├── any.hpp
│ │ │ ├── compiler_hints.hpp
│ │ │ ├── optional.hpp
│ │ │ ├── throw.hpp
│ │ │ ├── type_traits.hpp
│ │ │ ├── util.hpp
│ │ │ └── variant.hpp
│ │ └── video.hpp
│ ├── gapi.hpp
│ ├── highgui
│ │ ├── highgui_c.h
│ │ └── highgui.hpp
│ ├── highgui.hpp
│ ├── imgcodecs
│ │ ├── imgcodecs_c.h
│ │ ├── imgcodecs.hpp
│ │ ├── ios.h
│ │ └── legacy
│ │ └── constants_c.h
│ ├── imgcodecs.hpp
│ ├── imgproc
│ │ ├── detail
│ │ │ └── gcgraph.hpp
│ │ ├── hal
│ │ │ ├── hal.hpp
│ │ │ └── interface.h
│ │ ├── imgproc_c.h
│ │ ├── imgproc.hpp
│ │ └── types_c.h
│ ├── imgproc.hpp
│ ├── ml
│ │ ├── ml.hpp
│ │ └── ml.inl.hpp
│ ├── ml.hpp
│ ├── objdetect
│ │ ├── detection_based_tracker.hpp
│ │ └── objdetect.hpp
│ ├── objdetect.hpp
│ ├── opencv.hpp
│ ├── opencv_modules.hpp
│ ├── photo
│ │ ├── cuda.hpp
│ │ ├── legacy
│ │ │ └── constants_c.h
│ │ └── photo.hpp
│ ├── photo.hpp
│ ├── stitching
│ │ ├── detail
│ │ │ ├── autocalib.hpp
│ │ │ ├── blenders.hpp
│ │ │ ├── camera.hpp
│ │ │ ├── exposure_compensate.hpp
│ │ │ ├── matchers.hpp
│ │ │ ├── motion_estimators.hpp
│ │ │ ├── seam_finders.hpp
│ │ │ ├── timelapsers.hpp
│ │ │ ├── util.hpp
│ │ │ ├── util_inl.hpp
│ │ │ ├── warpers.hpp
│ │ │ └── warpers_inl.hpp
│ │ └── warpers.hpp
│ ├── stitching.hpp
│ ├── video
│ │ ├── background_segm.hpp
│ │ ├── legacy
│ │ │ └── constants_c.h
│ │ ├── tracking.hpp
│ │ └── video.hpp
│ ├── video.hpp
│ ├── videoio
│ │ ├── cap_ios.h
│ │ ├── legacy
│ │ │ └── constants_c.h
│ │ ├── registry.hpp
│ │ ├── videoio_c.h
│ │ └── videoio.hpp
│ └── videoio.hpp
├── lib
│ ├── cmake
│ │ └── opencv4
│ │ ├── OpenCVConfig.cmake
│ │ ├── OpenCVConfig-version.cmake
│ │ ├── OpenCVModules.cmake
│ │ └── OpenCVModules-release.cmake
│ ├── libopencv_calib3d.so -> libopencv_calib3d.so.4.4
│ ├── libopencv_calib3d.so.4.4 -> libopencv_calib3d.so.4.4.0
│ ├── libopencv_calib3d.so.4.4.0
│ ├── libopencv_core.so -> libopencv_core.so.4.4
│ ├── libopencv_core.so.4.4 -> libopencv_core.so.4.4.0
│ ├── libopencv_core.so.4.4.0
│ ├── libopencv_dnn.so -> libopencv_dnn.so.4.4
│ ├── libopencv_dnn.so.4.4 -> libopencv_dnn.so.4.4.0
│ ├── libopencv_dnn.so.4.4.0
│ ├── libopencv_features2d.so -> libopencv_features2d.so.4.4
│ ├── libopencv_features2d.so.4.4 -> libopencv_features2d.so.4.4.0
│ ├── libopencv_features2d.so.4.4.0
│ ├── libopencv_flann.so -> libopencv_flann.so.4.4
│ ├── libopencv_flann.so.4.4 -> libopencv_flann.so.4.4.0
│ ├── libopencv_flann.so.4.4.0
│ ├── libopencv_gapi.so -> libopencv_gapi.so.4.4
│ ├── libopencv_gapi.so.4.4 -> libopencv_gapi.so.4.4.0
│ ├── libopencv_gapi.so.4.4.0
│ ├── libopencv_highgui.so -> libopencv_highgui.so.4.4
│ ├── libopencv_highgui.so.4.4 -> libopencv_highgui.so.4.4.0
│ ├── libopencv_highgui.so.4.4.0
│ ├── libopencv_imgcodecs.so -> libopencv_imgcodecs.so.4.4
│ ├── libopencv_imgcodecs.so.4.4 -> libopencv_imgcodecs.so.4.4.0
│ ├── libopencv_imgcodecs.so.4.4.0
│ ├── libopencv_imgproc.so -> libopencv_imgproc.so.4.4
│ ├── libopencv_imgproc.so.4.4 -> libopencv_imgproc.so.4.4.0
│ ├── libopencv_imgproc.so.4.4.0
│ ├── libopencv_ml.so -> libopencv_ml.so.4.4
│ ├── libopencv_ml.so.4.4 -> libopencv_ml.so.4.4.0
│ ├── libopencv_ml.so.4.4.0
│ ├── libopencv_objdetect.so -> libopencv_objdetect.so.4.4
│ ├── libopencv_objdetect.so.4.4 -> libopencv_objdetect.so.4.4.0
│ ├── libopencv_objdetect.so.4.4.0
│ ├── libopencv_photo.so -> libopencv_photo.so.4.4
│ ├── libopencv_photo.so.4.4 -> libopencv_photo.so.4.4.0
│ ├── libopencv_photo.so.4.4.0
│ ├── libopencv_stitching.so -> libopencv_stitching.so.4.4
│ ├── libopencv_stitching.so.4.4 -> libopencv_stitching.so.4.4.0
│ ├── libopencv_stitching.so.4.4.0
│ ├── libopencv_videoio.so -> libopencv_videoio.so.4.4
│ ├── libopencv_videoio.so.4.4 -> libopencv_videoio.so.4.4.0
│ ├── libopencv_videoio.so.4.4.0
│ ├── libopencv_video.so -> libopencv_video.so.4.4
│ ├── libopencv_video.so.4.4 -> libopencv_video.so.4.4.0
│ └── libopencv_video.so.4.4.0
└── share
├── licenses
│ └── opencv4
│ ├── ade-LICENSE
│ ├── jasper-copyright
│ ├── jasper-LICENSE
│ ├── jasper-README
│ ├── libjpeg-turbo-LICENSE.md
│ ├── libjpeg-turbo-README.ijg
│ ├── libjpeg-turbo-README.md
│ ├── libpng-LICENSE
│ ├── libpng-README
│ ├── libtiff-COPYRIGHT
│ ├── opencl-headers-LICENSE.txt
│ ├── protobuf-LICENSE
│ ├── protobuf-README.md
│ ├── quirc-LICENSE
│ ├── SoftFloat-COPYING.txt
│ └── zlib-README
└── opencv4
├── haarcascades
│ ├── haarcascade_eye_tree_eyeglasses.xml
│ ├── haarcascade_eye.xml
│ ├── haarcascade_frontalcatface_extended.xml
│ ├── haarcascade_frontalcatface.xml
│ ├── haarcascade_frontalface_alt2.xml
│ ├── haarcascade_frontalface_alt_tree.xml
│ ├── haarcascade_frontalface_alt.xml
│ ├── haarcascade_frontalface_default.xml
│ ├── haarcascade_fullbody.xml
│ ├── haarcascade_lefteye_2splits.xml
│ ├── haarcascade_licence_plate_rus_16stages.xml
│ ├── haarcascade_lowerbody.xml
│ ├── haarcascade_profileface.xml
│ ├── haarcascade_righteye_2splits.xml
│ ├── haarcascade_russian_plate_number.xml
│ ├── haarcascade_smile.xml
│ └── haarcascade_upperbody.xml
├── lbpcascades
│ ├── lbpcascade_frontalcatface.xml
│ ├── lbpcascade_frontalface_improved.xml
│ ├── lbpcascade_frontalface.xml
│ ├── lbpcascade_profileface.xml
│ └── lbpcascade_silverware.xml
├── valgrind_3rdparty.supp
└── valgrind.supp
上面就是整个arm-opencv中的东西了。后续的QT编译还得依赖他。本次分享就先这样了。