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文件。删除如下图所示代码:

58e625041f35e4c42837f06f72870e0a.png

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  编译正确

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值