ncnn arm linux,arm ncnn
ncnn网址:https://github.com/Tencent/ncnn
1、
sudo apt-get update
sudo apt-get upgrade
2、
命令:sudo apt-get install g++-4.8-arm-linux-gnueabihf
sudo apt-get install gcc-4.8-arm-linux-gnueabihf
测试:
$arm-linux-gnueabihf-g++-4.8 --version
arm-linux-gnueabihf-g++-4.8 (Ubuntu/Linaro 4.8.5-4ubuntu1) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
sudo ln -s /usr/bin/arm-linux-gnueabihf-g++-4.8 /usr/bin/arm-linux-gnueabihf-g++
sudo ln -s /usr/bin/arm-linux-gnueabihf-gcc-4.8 /usr/bin/arm-linux-gnueabihf-gcc
arm linux 64位交叉编译器
网址:https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/
下载:gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
vi ~/.bashrc
export PATH=/home/Your Name/armlinux/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin:$PATH
source ~/.bashrc
测试:
aarch64-linux-gnu-g++ --version
输出:
aarch64-linux-gnu-g++ (Linaro GCC 6.3-2017.05) 6.3.1 20170404
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
3、在ncnn目录下的CMakeLists.txt,在cmake_minimum_required(VERSION 2.8.10)下面添加
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
add_definitions(-D__ARM_NEON)
add_definitions("-mfpu=neon")
4、 src文件夹下,修改该文件夹下的CMakeLists.txt文件。删除如下图所示代码:
CMakeLists.txt为
##############################################
configure_file(platform.h.in ${CMAKE_CURRENT_BINARY_DIR}/platform.h)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/layer)set(ncnn_SRCS
allocator.cpp
blob.cpp
cpu.cpp
layer.cpp
mat.cpp
mat_pixel.cpp
modelbin.cpp
net.cpp
opencv.cpp
paramdict.cpp
benchmark.cpp
)
macro(ncnn_add_layerclass)string(TOLOWER ${class} name)
# WITH_LAYER_xxx optionif(${ARGC} EQUAL 2)
option(WITH_LAYER_${name}"build with layer ${name}"${ARGV1})else()
option(WITH_LAYER_${name}"build with layer ${name}"ON)
endif()
message("WITH_LAYER_${name} = ${WITH_LAYER_${name}}")if(WITH_LAYER_${name})
list(APPEND ncnn_SRCS"${CMAKE_CURRENT_SOURCE_DIR}/layer/${name}.cpp")
# lookforarch specific implementation and append source
# optimized implementationforarmv7 aarch64if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/layer/arm/${name}_arm.cpp")
list(APPEND ncnn_SRCS"${CMAKE_CURRENT_SOURCE_DIR}/layer/arm/${name}_arm.cpp")set(WITH_LAYER_${name}_arm 1)
endif()
endif()
# generate layer_declaration and layer_registry fileif(WITH_LAYER_${name})if(WITH_LAYER_${name}_arm)
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/layer_declaration.h"extern Layer* ${class}_arm_layer_creator();")
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/layer_registry.h"#if NCNN_STRING
{"${class}",${class}_arm_layer_creator},
#else
{${class}_arm_layer_creator},
#endif")
elseif(WITH_LAYER_${name}_x86)
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/layer_declaration.h"extern Layer* ${class}_x86_layer_creator();")
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/layer_registry.h"#if NCNN_STRING
{"${class}",${class}_x86_layer_creator},
#else
{${class}_x86_layer_creator},
#endif")else()
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/layer_declaration.h"extern Layer* ${class}_layer_creator();")
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/layer_registry.h"#if NCNN_STRING
{"${class}",${class}_layer_creator},
#else
{${class}_layer_creator},
#endif")
endif()else()
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/layer_registry.h "#if NCNN_STRING
{"${class}",0},
#else
{0},
#endif")
endif()
# generate layer_type_enum file
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/layer_type_enum.h "${class} = ${__LAYER_TYPE_ENUM_INDEX},")
math(EXPR __LAYER_TYPE_ENUM_INDEX"${__LAYER_TYPE_ENUM_INDEX}+1")
endmacro()
# createnewfile(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/layer_declaration.h)
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/layer_registry.h)
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/layer_type_enum.h)set(__LAYER_TYPE_ENUM_INDEX 0)
# layer implementation
ncnn_add_layer(AbsVal)
ncnn_add_layer(ArgMax OFF)
ncnn_add_layer(BatchNorm)
ncnn_add_layer(Bias)
ncnn_add_layer(BNLL)
ncnn_add_layer(Concat)
ncnn_add_layer(Convolution)
ncnn_add_layer(Crop)
ncnn_add_layer(Deconvolution)
ncnn_add_layer(Dropout)
ncnn_add_layer(Eltwise)
ncnn_add_layer(ELU)
ncnn_add_layer(Embed)
ncnn_add_layer(Exp)
ncnn_add_layer(Flatten)
ncnn_add_layer(InnerProduct)
ncnn_add_layer(Input)
ncnn_add_layer(Log)
ncnn_add_layer(LRN)
ncnn_add_layer(MemoryData)
ncnn_add_layer(MVN)
ncnn_add_layer(Pooling)
ncnn_add_layer(Power)
ncnn_add_layer(PReLU)
ncnn_add_layer(Proposal)
ncnn_add_layer(Reduction)
ncnn_add_layer(ReLU)
ncnn_add_layer(Reshape)
ncnn_add_layer(ROIPooling)
ncnn_add_layer(Scale)
ncnn_add_layer(Sigmoid)
ncnn_add_layer(Slice)
ncnn_add_layer(Softmax)
ncnn_add_layer(Split)
ncnn_add_layer(SPP OFF)
ncnn_add_layer(TanH)
ncnn_add_layer(Threshold)
ncnn_add_layer(Tile OFF)
ncnn_add_layer(RNN OFF)
ncnn_add_layer(LSTM OFF)
ncnn_add_layer(BinaryOp)
ncnn_add_layer(UnaryOp)
ncnn_add_layer(ConvolutionDepthWise)
ncnn_add_layer(Padding)
ncnn_add_layer(Squeeze)
ncnn_add_layer(ExpandDims)
ncnn_add_layer(Normalize)
ncnn_add_layer(Permute)
ncnn_add_layer(PriorBox)
ncnn_add_layer(DetectionOutput)
ncnn_add_layer(Interp)
ncnn_add_layer(DeconvolutionDepthWise)
ncnn_add_layer(ShuffleChannel)
ncnn_add_layer(InstanceNorm)
ncnn_add_layer(Clip)
ncnn_add_layer(Reorg)
ncnn_add_layer(YoloDetectionOutput)
ncnn_add_layer(Quantize)
ncnn_add_layer(Dequantize)
ncnn_add_layer(Yolov3DetectionOutput)
add_library(ncnn STATIC ${ncnn_SRCS})if(COVERAGE)
target_compile_options(ncnn PRIVATE--coverage)
endif()
install(TARGETS ncnn ARCHIVE DESTINATION lib)
install(FILES
allocator.h
blob.h
cpu.h
layer.h
layer_type.h
mat.h
modelbin.h
net.h
opencv.h
paramdict.h
benchmark.h
${CMAKE_CURRENT_BINARY_DIR}/layer_type_enum.h
${CMAKE_CURRENT_BINARY_DIR}/platform.h
DESTINATION include
)
编译
git clone https://github.com/Tencent/ncnn
cd ncnn
mkdir build
cd build
cmake ..
make-j
make install
检查:
readelf libncnn.a –a
最后出现
Tag_Advanced_SIMD_arch: NEONv1 编译正确
ncnn arm linux,arm ncnn相关推荐
- easypr arm linux,arm linux下交叉編譯EasyPR中文車牌識別系統開發(一)
EasyPR中文車牌識別系統開發(一),我主要介紹如何使用開源的EasyPR中文車牌識別系統,當然后面我會介紹訓練機器學習 SVM 支持向量機和 ANN 人工神經網絡模型在車牌識別的應用. 目錄: 一 ...
- arm linux 启动之一:汇编启动到start_kernel
描述arm linux启动的概要过程,以S5PV210(Cortex A8)为例,本文描述第一个阶段. 一.arm linux的引导 uboot在引导arm linux(uImage镜像)到SDRAM ...
- ARM Linux 3.x的设备树(Device Tree)【转】
转自:http://blog.csdn.net/21cnbao/article/details/8457546 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] ARM Devi ...
- arm linux嵌入式网络控制系统,基于ARMLinux的嵌入式网络控制系统的研究与设计
摘要: 随着计算机技术.控制技术和网络技术的蓬勃发展,嵌入式系统与网络控制系统的应用越来越广阔.当前控制系统正经历一场前所未有的变革,远程监控和智能控制成为控制系统发展的重要方向.通过嵌入式网络控制系 ...
- python linux arm_[Python]python for ARM/LINUX
按照下面的方法,可以成功将python2.5 build到 ARM /linux , 我已经成功了: Download latest from www.python.org Save into /ho ...
- 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容...
[Qt开发][VS开发][Linux开发]OpenCV.Qt-MinGw.Qt-msvc.VS2010.VS2015.Ubuntu Linux.ARM Linux中几个特别容易混淆的内容 标签:[Qt ...
- ARM linux的启动部分源代码简略分析
ARM linux的启动部分源代码简略分析 以友善之臂的mini2440开发板为平台,以较新的内核linux-2.6.32.7版本为例,仅作说明之用. 当内核映像被加载到RAM之后,Bootloade ...
- ARM+linux+2440嵌入式开发相关经典书籍(转)
源:ARM+linux+2440嵌入式开发相关经典书籍 转载于:https://www.cnblogs.com/LittleTiger/p/7992971.html
- linux pfn,ARM Linux下的page和pfn之间转换的宏。
ARM Linux下的page和pfn之间转换的宏如下: 1)page_to_pfn 2)pfn_to_page 这两个宏依赖于内核编译时,选择的内存模型.在include/asm-generic/m ...
最新文章
- 开源的关于智能车竞赛光电起始点方案
- 人生第一个快速幂的题(HDU - 1097--A hard puzzle )
- YOLOv5-Lite 使用笔记
- python爬虫实例-python3.7简单的爬虫实例详解
- Spring官网阅读(一)容器及实例化
- linux中使用svn客户端
- centerandzoom 无效_在bootstrap modal 中加载百度地图的信息窗口失效解决方法
- eclipse开发javaweb项目配置tomcat
- c语言 define 关键字,c语言中define的一个不常见的用法
- linux每隔多久调度y,Linux 进程调度+Linux系统一般执行过程 笔记
- python-往对象中添加属性值
- IE 7 Standard 模式问题总结
- python基础4-序列
- c语言二叉树的序列化,不怕面试被问了!二叉树算法大盘点
- 移动硬盘打不开提示格式化如何恢复数据
- MacBook Air 2013全新安装Win7
- mysql rand_MySQL中的RAND()函数使用详解
- 12306 验证码识别源码
- PowerBi - 建模与关系函数
- gitlab服务器代码存储位置,gitlab仓库存储位置的修改方法