记一次NCNN编译安装以及使用过程(树莓派4b)

总体来说,这一过程还是比较简单。耐心点就可以完成。其他的系统也可以对照官方的wiki去完成编译过程。

编译过程(RaspberryPi 4b)

  • 打开你的项目文件夹,然后拉ncnn源代码,此外你还需要拉glslang的代码;
  • cd ncnn && git clone https://github.com/KhronosGroup/glslang.git
  • mkdir build && cd build
  • 安装一些需要的依赖软件包;运行
sudo apt install build-essential git cmake libprotobuf-dev protobuf-compiler libvulkan-dev vulkan-utils libopencv-dev
  • cmake -DCMAKE_BUILD_TYPE=Release -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=ON ..
  • make -j8
  • 在编译完后,会生成一些包和库;所以你需要建立文件夹把他们存起来;我这里是在ncnn/build下面新建一个lib文件夹用来存所有生成的静态库.a文件,如下图所示,找到生成的libxxx.a,拷贝到lib下面就行了;
  • 你还需要拷贝的是ncnn/build/src文件夹下的platform.hncnn_export.h,找到它们,然后拷贝到ncnn/src目录下。之后引用头文件的时候,直接引用到ncnn/src下面就可以了。不然会报找不到这俩头文件的错。
  • 这样我们就能把它当作库来使用了。
    在这里插入图片描述

使用

使用过程我遇到了很多库会有连接不上的问题,例如

undefined reference to `glslang::InitGlobalLock()'
/usr/bin/ld: ShaderLang.cpp:(.text+0x2430): undefined reference to `glslang::GetGlobalLock()'
/usr/bin/ld: ShaderLang.cpp:(.text+0x2454): undefined reference to `glslang::ReleaseGlobalLock()'

官方的issue给出了解决方案;g++在编译的时候记得链接下面这些库:
-lncnn -lvulkan -lglslang -lOSDependent -lSPIRV -lOGLCompiler -lGenericCodeGen -lMachineIndependent

# 文件夹层级结构
.
├── Makefile
├── src
│   └── main.cpp
└── workspace
    ├── 3.jpg
    ├── xxxx
    ├── xxxx.bin
    ├── xxxx.onnx
    ├── xxxx.param
    └── result.jpg

这里我贴出makefile来,仅供大家参考

cc        := g++
name      := fastdet
workdir   := workspace
srcdir    := src
objdir    := objs
stdcpp    := c++11
syslib    := /usr/lib

cpp_srcs := $(shell find $(srcdir) -name "*.cpp")
cpp_objs := $(cpp_srcs:.cpp=.cpp.o)
cpp_objs := $(cpp_objs:$(srcdir)/%=$(objdir)/%)
cpp_mk   := $(cpp_objs:.cpp.o=.cpp.mk)

link_opencv    := opencv_core opencv_imgproc opencv_imgcodecs
link_ncnn	   := ncnn glslang OSDependent OGLCompiler SPIRV GenericCodeGen MachineIndependent
link_vulkan	   := vulkan
link_sys       := stdc++ dl
link_librarys  := $(link_sys)  $(link_opencv) $(link_vulkan) $(link_ncnn)
include_opencv    := /usr/include/opencv4
lib_opencv    := /lib/aarch64-linux-gnu/lib

# ncnn config
include_ncnn := /home/pi/Documents/ncnn/src
lib_ncnn	 := /home/pi/Documents/ncnn/build/lib

include_paths := src    \
	$(include_protobuf) \
	$(include_opencv) \
	$(include_ncnn)

library_paths := $(lib_all) $(lib_opencv) $(lib_ncnn)
empty := 
library_path_export := $(subst $(empty) $(empty),:,$(library_paths))

run_paths     := $(foreach item,$(library_paths),-Wl,-rpath=$(item))
include_paths := $(foreach item,$(include_paths),-I$(item))
library_paths := $(foreach item,$(library_paths),-L$(item))
link_librarys := $(foreach item,$(link_librarys),-l$(item))
defined       := $(foreach item,$(defined),-D$(item))

cpp_compile_flags := -std=$(stdcpp) -w -g -O0 -fPIC -fopenmp -pthread $(defined)
link_flags        := -pthread -fopenmp -Wl,-rpath='$$ORIGIN'

cpp_compile_flags += $(include_paths)
link_flags        += $(library_paths) $(link_librarys) $(run_paths)

ifneq ($(MAKECMDGOALS), clean)
-include $(cpp_mk) $(cu_mk)
endif

$(name)   : $(workdir)/$(name)
all       : $(name)
run       : $(name)
	@cd $(workdir) && ./$(name) $(run_args)

$(workdir)/$(name) : $(cpp_objs)
	@echo Link $@
	@mkdir -p $(dir $@)
	@$(cc) $^ -o $@ $(link_flags) -lncnn -lvulkan -lglslang -lOSDependent -lSPIRV -lOGLCompiler -lGenericCodeGen -lMachineIndependent

$(objdir)/%.cpp.o : $(srcdir)/%.cpp
	@echo Compile CXX $<
	@mkdir -p $(dir $@)
	@$(cc) -c $< -o $@ $(cpp_compile_flags)

$(objdir)/%.cpp.mk : $(srcdir)/%.cpp
	@echo Compile depends C++ $<
	@mkdir -p $(dir $@)
	@$(cc) -M $< -MF $@ -MT $(@:.cpp.mk=.cpp.o) $(cpp_compile_flags)
    
clean :
	@rm -rf $(objdir) $(workdir)/$(name)
.PHONY : clean run $(name)
export LD_LIBRARY_PATH:=$(library_path_export)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Windows下编译安装ncnn,您可以按照以下步骤进行操作: 1. 下载和安装相关编译工具:您可以从ncnn官方GitHub页面(https://github.com/Tencent/ncnn)下载相关代码。您需要下载和安装CMake(版本3.10以上)以及Visual Studio(建议使用2019版本)。 2. 打开Visual Studio 开发人员命令提示符:在开始菜单中找到Visual Studio并右键单击,选择以管理员身份运行。这将打开一个命令提示符。 3. 配置CMake编译参数:使用cd命令切换到您下载的ncnn源码目录。然后,使用cmake命令来生成Visual Studio项目文件。例如,可以使用以下命令进行配置: ``` mkdir build cd build cmake -G "Visual Studio 16 2019" .. ``` 这将在build文件夹中生成Visual Studio项目文件。 4. 使用Visual Studio进行编译:在Visual Studio开发人员命令提示符中运行以下命令,使用Visual Studio生成ncnn库和示例程序: ``` cmake --build . --config Release ``` 这将开始编译ncnn库和示例程序,并生成相应的可执行文件。 5. 配置环境变量:在系统环境变量中添加ncnn库的路径,以便其他程序能够正常使用(例如将ncnn库目录添加到PATH变量中)。 至此,您已经成功在Windows下编译安装了ncnn。现在,您可以使用ncnn库进行深度学习任务,如目标检测、人脸识别等。请注意,根据您的配置和需求,可能还需要进行其他设置和安装依赖项,以确保ncnn能够正常运行。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值