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