1 问题

这两天在Windows上使用NCNN进行模型部署,在VS项目中配置好NCNN的头文件、lib之后,编译项目出现了以下错误

fatal error C1083: 无法打开包括文件: “vulkan/vulkan.h”: No such file or directory

我这里使用的ncnn是Github仓库上的预编译库,库的版本是20230223 ff80ac2,下载的是ncnn-20230223-windows-vs2019-shared.zip,使用这个库进行的项目配置,如下图所示

NCNN – Windows编译NCNN项目出现无法打开包括文件vulkan.h的错误-StubbornHuang Blog

2 原因

通过仔细看ncnn预编译包的发布文档,我们看到ncnn-windows的发布包都是默认支持GPU的,所有说需要Vulkan的支持,但是我的电脑上没有安装Vulkan的SDK,也没有在项目中配置Vulkan的路径,所以就出现找不到vulkan.h的编译错误了。

NCNN – Windows编译NCNN项目出现无法打开包括文件vulkan.h的错误-StubbornHuang Blog

3 解决方法

3.1 需要GPU进行模型部署、推理

如果你确实需要使用GPU对模型进行推理,那么就必须要下载Vulkan安装,然后在项目中配置Vulkan的环境。

Vulkan SDk的下载地址:https://vulkan.lunarg.com/sdk/home ,下载最新的版本安装即可,安装完成之后会得到相应的Include、Lib、Bin目录,然后在NCNN的项目中配置即可。

NCNN – Windows编译NCNN项目出现无法打开包括文件vulkan.h的错误-StubbornHuang Blog

3.2 不需要GPU进行模型部署、推理

如果你不需要使用GPU,只需要使用CPU,那么这个时候提供了两种方法可以解决编译错误。

3.2.1 修改相关的头文件

这是一个绕过编译错误的trick,为什么ncnn的windows发布包默认使用Vulkan,是因为定义了

#define NCNN_VULKAN 1

所以如果我们不需要使用Vulkan,那么直接修改ncnn的头文件platform.h,将

#define NCNN_VULKAN 1

这一行修改为

#define NCNN_VULKAN 0

即可。

3.2.2 重新编译不使用Vulkan的ncnn库

编译的教程可参考:https://www.stubbornhuang.com/2556/

我们在CMake时将-DNCNN_VULKAN=OFF设置成OFF即可,编译完成之后重新引入项目即可编译成功。