【OpenCV3】Opencv3.2.0在Hisi3521下的交叉编译和移植
说明:hisi3521交叉编译工具arm-hisiv300-linux已经配置完成,cmake已经安装。
1. 从官网(https://github.com/opencv/opencv/archive/3.2.0.tar.gz)下载opencv3.2.0源码压缩包。
2. 将压缩包上传到Ubuntu下的工作目录(/home/work)下,使用命令tar vxf opencv-3.2.0.tar.gz解压到当前文件夹。
3. cd opencv-3.2.0/platforms/linux进入linux编译目录。
4. sudogedit arm.toolchain.cmake修改该cmake文件内容如下:
5. 在当前文件夹下新建编译文件夹mkdir build_hisi; cd build_hisi/ 进入编译文件夹。
if(COMMAND toolchain_save_config)return() # prevent recursive call
endif()set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
if(NOT DEFINED CMAKE_SYSTEM_PROCESSOR)set(CMAKE_SYSTEM_PROCESSOR arm-hisiv300-linux-gnueabi)
else()#message("CMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}")
endif()include("${CMAKE_CURRENT_LIST_DIR}/gnu.toolchain.cmake")if(CMAKE_SYSTEM_PROCESSOR STREQUAL arm AND NOT ARM_IGNORE_FP)set(FLOAT_ABI_SUFFIX "")if(NOT SOFTFP)set(FLOAT_ABI_SUFFIX "hf")endif()
endif()if(NOT "x${GCC_COMPILER_VERSION}" STREQUAL "x")set(__GCC_VER_SUFFIX "4.6" CACHE STRING "GCC Compiler version")
endif()#CROSS COMPILE SETTING
set(TOOLCHAIN_DIR "/opt/hisi-linux/x86-arm/arm-hisiv300-linux/")
set(CMAKE_C_COMPILER "/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-uclibcgnueabi-gcc")
set(CMAKE_CXX_COMPILER "/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-uclibcgnueabi-g++")
set(CMAKE_FIND_ROOT_PATH /opt/hisi-linux/ /opt/hisi-linux/x86-arm/arm-hisiv300-linux/)
set(ARM_LINUX_SYSROOT /opt/hisi-linux/x86-arm/arm-hisiv300-linux/ CACHE PATH "ARM cross compile system root")MESSAGE(STATUS "This is cross compile dir --->"$(CMAKE_C_COMPILER))#if(NOT DEFINED CMAKE_C_COMPILER)
# find_program(CMAKE_C_COMPILER NAMES ${GNU_MACHINE}${FLOAT_ABI_SUFFIX}-gcc${__GCC_VER_SUFFIX})
#else()
# #message(WARNING "CMAKE_C_COMPILER=${CMAKE_C_COMPILER} is defined")
#endif()
#if(NOT DEFINED CMAKE_CXX_COMPILER)
# find_program(CMAKE_CXX_COMPILER NAMES ${GNU_MACHINE}${FLOAT_ABI_SUFFIX}-g++${__GCC_VER_SUFFIX})
#else()#message(WARNING "CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} is defined")
#endif()
#if(NOT DEFINED CMAKE_LINKER)
# find_program(CMAKE_LINKER NAMES ${GNU_MACHINE}${FLOAT_ABI_SUFFIX}-ld${__GCC_VER_SUFFIX} ${GNU_MACHINE}${FLOAT_ABI_SUFFIX}-ld)
#else()
# #message(WARNING "CMAKE_LINKER=${CMAKE_LINKER} is defined")
#endif()
#if(NOT DEFINED CMAKE_AR)
# find_program(CMAKE_AR NAMES ${GNU_MACHINE}${FLOAT_ABI_SUFFIX}-ar${__GCC_VER_SUFFIX} ${GNU_MACHINE}${FLOAT_ABI_SUFFIX}-ar)
#else()
# #message(WARNING "CMAKE_AR=${CMAKE_AR} is defined")
#endif()#if(NOT DEFINED ARM_LINUX_SYSROOT AND DEFINED GNU_MACHINE)
# set(ARM_LINUX_SYSROOT /usr/${GNU_MACHINE}${FLOAT_ABI_SUFFIX})
#endif()#if(NOT DEFINED CMAKE_CXX_FLAGS)
# set(CMAKE_CXX_FLAGS "" CACHE INTERAL "")
# set(CMAKE_C_FLAGS "" CACHE INTERAL "")
# set(CMAKE_SHARED_LINKER_FLAGS "" CACHE INTERAL "")
# set(CMAKE_MODULE_LINKER_FLAGS "" CACHE INTERAL "")
# set(CMAKE_EXE_LINKER_FLAGS "" CACHE INTERAL "")# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")
# if(CMAKE_SYSTEM_PROCESSOR STREQUAL arm)
# set(CMAKE_CXX_FLAGS "-mthumb ${CMAKE_CXX_FLAGS}")
# set(CMAKE_C_FLAGS "-mthumb ${CMAKE_C_FLAGS}")
# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,nocopyreloc")
# endif()
# if(CMAKE_SYSTEM_PROCESSOR STREQUAL arm)
# set(ARM_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
# elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)
# set(ARM_LINKER_FLAGS "-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
# endif()
# set(CMAKE_SHARED_LINKER_FLAGS "${ARM_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}")
# set(CMAKE_MODULE_LINKER_FLAGS "${ARM_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}")
# set(CMAKE_EXE_LINKER_FLAGS "${ARM_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}")
#else()
# #message(WARNING "CMAKE_CXX_FLAGS='${CMAKE_CXX_FLAGS}' is defined")
#endif()set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_MODULE_LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_EXE_LINKER_FLAGS}")if(USE_NEON)message(WARNING "You use obsolete variable USE_NEON to enable NEON instruction set. Use -DENABLE_NEON=ON instead." )set(ENABLE_NEON TRUE)
elseif(USE_VFPV3)message(WARNING "You use obsolete variable USE_VFPV3 to enable VFPV3 instruction set. Use -DENABLE_VFPV3=ON instead." )set(ENABLE_VFPV3 TRUE)
endif()#set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${ARM_LINUX_SYSROOT})if(EXISTS ${CUDA_TOOLKIT_ROOT_DIR})set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CUDA_TOOLKIT_ROOT_DIR})
endif()set(TOOLCHAIN_CONFIG_VARS ${TOOLCHAIN_CONFIG_VARS}ARM_LINUX_SYSROOTENABLE_NEONENABLE_VFPV3CUDA_TOOLKIT_ROOT_DIR
)set( CMAKE_SKIP_RPATH TRUE CACHE BOOL "If set, runtime paths are not added when using shared libraries." )
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)# macro to find programs on the host OS
macro( find_host_program )set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )if( CMAKE_HOST_WIN32 )SET( WIN32 1 )SET( UNIX )elseif( CMAKE_HOST_APPLE )SET( APPLE 1 )SET( UNIX )endif()find_program( ${ARGN} )SET( WIN32 )SET( APPLE )SET( UNIX 1 )set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
endmacro()# macro to find packages on the host OS
macro( find_host_package )set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )if( CMAKE_HOST_WIN32 )SET( WIN32 1 )SET( UNIX )elseif( CMAKE_HOST_APPLE )SET( APPLE 1 )SET( UNIX )endif()find_package( ${ARGN} )SET( WIN32 )SET( APPLE )SET( UNIX 1 )set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
endmacro()
toolchain_save_config()
6. cmake -DCMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=../install_dir -D SOFTFP=ON -DENABLE_NEON=ON -D CMAKE_TOOLCHAIN_FILE=../arm-gnueabi.toolchain.cmake ../../../
7. 配置完成后执行make编译
8. 编译完成后执行make install安装。
9. 执行命令cd /etc/ld.so.conf.d/,在该文件夹下新建文件sudo gedit opencv_hisi.conf,输入{安装目录}lib.
10. 保存退出,执行sudo ldconfig。
11. sudo gedit /etc/bash.bashrc在末尾添加:
OH_PKG_CONFIG_PATH=$OH_PKG_CONFIG_PATH:/home/philos/work/Libraries/opencv/lib/pkgconfigexport OH_PKG_CONFIG_PATH。
12. 保存退出,执行sudo source /etc/bash.bashrc。
【OpenCV3】Opencv3.2.0在Hisi3521下的交叉编译和移植相关推荐
- linux编译linphone,Ubuntu下linphone交叉编译与移植
移植前搞清楚linphone依赖库的关系,这个一般是移植工作的关键所在,还有一个关键是目标平台的交叉编译器. linphone-3.1.0依赖的库如下: speex(又依赖libogg) libosi ...
- LINPHONE在嵌入式LINUX下的交叉编译和移植
注:此过程仅适合LINPHONE3.6.1以下的版本,高版本的编译有所不同 QQ交流:63314957 环境变量: export PREFIX=/usr export HOSTTPL=arm-linu ...
- opencv-3.4.3 交叉编译并且移植到高通820开发板(包括Qt 5.11.2部分交叉编译及移植),NEON OpenCV编译
opencv-3.4.3 交叉编译并且移植到高通820开发板(包括Qt 5.11.2部分交叉编译及移植),NEON OpenCV编译 原文我是用有道笔记记录的,下面排版不是很好,可参看有道笔记原文:h ...
- 瑞友天翼4.0在XP下安装注意事项
瑞友天翼4.0在XP下安装注意事项 此版本只支持Windows Xp Professinal SP2下安装.如果你的Xp不是SP2请按照一下方法修改操作系统,并安装Xp的SP2补丁包!+ o( f+ ...
- MySql4.1.7 + PHP5 + Apache2.0.52(win2003下测试通过)
MySql4.1.7 + PHP5 + Apache2.0.52(win2003下测试通过) 1.下载 2.安装 解压 3.配置 Apache与PHP的整合: 3a).与3b).任选一种,我是选3a) ...
- Windows10+CUDA8.0+VS2015+CUDNN5下配置caffe
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zhj_matlab/article/details/69943869 </div>< ...
- Android 4.0.4系统下实现apk的静默安装和启动
转自http://www.linuxidc.com/Linux/2013-02/79403.htm 未亲测 最近在Android 4.0.4系统下实现apk的静默安装和启动的功能,这里和大家分享一下, ...
- 【USB笔记】USB2.0 不同传输类型下的理论最大速率
USB笔记 USB2.0 不同传输类型下的理论最大速率 USB2.0协议中定义了三种速率,低速(low speed),全速(full speed),高速(high speed). 最大速率如下: 最大 ...
- mysql权限认证_MySQL 8.0权限认证(下)
MySQL 8.0权限认证(下) 一.设置MySQL用户资源限制 通过设置全局变量max_user_connections可以限制所有用户在同一时间连接MySQL实例的数量,但此参数无法对每个用户区别 ...
最新文章
- MySQL面试题 | 附答案解析(四)
- 去伪存真:因果约束下的图神经网络泛化
- [BZOJ 4563]放棋子
- 【微服务学习】Polly:熔断降级组件
- Spring Bean初始化过程
- Git合并两个不同的仓库
- C/C++ 进阶 —— static
- 图像处理与计算机视觉经典文章
- Python数据结构与算法(1.1)——数据结构与算法导论
- jquery之提示信息
- COMSOL6.0 版本新功能:求解大型瞬态声学问题
- MinGW-w64的安装及配置教程
- c语言判断素数 是返回1,c语言编程:设计一个函数用于判断一个数是否为素数,如果是素数返回1,否则返回0。...
- 小红书用户画像分析_用户画像,该怎么分析?
- Excel输入公式计算只显示公式不出结果
- SAP SMW0 上传EXCEL模板
- steamship 使用gpt-4
- matlab进行mppt控制仿真,基于matlab光伏发电系统的MPPT控制与仿真.pdf
- CSDN这个家比博客园温馨好多啊,我要搬家了。。。
- java生成excel并输出到浏览器下载
热门文章
- Java 8 - 收集器Collectors_分区partitioningBy
- Apache Kafka-初体验Kafka(01)-入门整体认识kafka
- 修改centos等linux的hostname-永久生效
- EFI启动PE加Linux,macOS安装盘制作并添加EFI和WinPE
- centos7.6基础
- ubuntu笔记:查看Ubuntu的包依赖关系
- c4d支持mac系统渲染器有哪些_C4D常用的4大主流渲染器如何选择与比较 (OC/RS/VR/阿诺德)...
- 基于MATLAB的小波收缩法信号去噪
- uboot启动流程概述_关于RISCV启动部分的思考~
- mysql cluster java_Java学习笔记(十):MySQL集群安装配置