海思交叉编译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
参考资料:
undefined reference to `png_init_filter_functions_neon’_weixin_42330265的博客-CSDN博客