海思交叉编译opencv4(以opencv400为例)
海思交叉编译opencv4(以opencv400为例)
海思交叉编译器的安装
解压aarch64-himix100-linux.tgz,然后使用sudo权限运行gcc-arm-none-eabi-4_9-2015q3.install
正常情况下应无报错信息。
opencv的编译
-
下载opencv4.0.0和opencv_contrib,将其分别解压。 对于opencv4.0.0,修改最顶层的CMakeList.txt,找到ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR}),并在下面添加:
ocv_include_directories(./3rdparty/zlib)
用以解决fatal error: zlib.h: No such file or directory #include “zlib.h”:
-
修改opencv4.0.0/3rdparty/libpng/CMakeLists.txt,在最前面添加
IF(HISI3559A) SET(ARM 1) SET(ENABLE_NEON 1) ENDIF()
用以解决libopencv_imgcodecs.so.4.1.0: undefined reference to png_init_filter_functions_neon
或者也可以修改opencv4.0.0/3rdparty/libpng/pngpriv.h
将
if (defined(__ARM_NEON__) || defined(__ARM_NEON)) &&
注释,即改为
/*# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && */
并在其下面添加一行
# if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) &&
两种方案均可。
新建build.sh,里面存放着cmake的命令
cmake
-DCMAKE_BUILD_TYPE=RELEASE
-DCMAKE_C_COMPILER=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc
-DCMAKE_CXX_COMPILER=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-g++
-DBUILD_SHARED_LIBS=ON
-DCMAKE_CXX_FLAGS=-fPIC
-DCMAKE_C_FLAGS=-fPIC
-DCMAKE_EXE_LINKER_FLAGS=-lpthread -lrt -ldl
-DENABLE_PIC=ON
-DHISI3559A=1
-DCMAKE_INSTALL_PREFIX=../../opencv4/
-DWITH_IPP=OFF
-DWITH_ITT=OFF
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.0.0/modules
..
这里需要特别注意-DWITH_ITT=OFF,要不然会找不到TBB定义。至于IPP因为是intel的,保险起见关掉了。
cmake过程中,可能会出现一些需要下载而且特别慢的地方。例如ippicv,这些需要进入相应的module下,修改cmake或者makefile,将url改为file:/path/to/the/file。
然后执行命令:
mkdir build cd build cp ../build.sh . ./builld.sh make -j8 make install
涉及的文件可以从我的百度网盘下载: 链接:https://pan.baidu.com/s/10Y_RxSr7dt6_jpVpzw_zfA 提取码:qxx1
参考资料:
