Win 下 ncnn 编译运行

本文详细记录了在Windows10环境下使用VS2022编译和运行NCNN库时遇到的问题,包括头文件路径设置、外部符号链接和版本兼容性等,并提供了相应的解决方法。

ncnn

官网上编译的过程比较详细,本文主要记录编译、运行过程中遇到的问题,希望可以帮到大家。

我的环境是 Win10 系统,VS 2022。

编译

先使用如下命令获取 ncnn 代码库:

git clone https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init

点击链接 protobuf-3.11.2 下载 protobuf。

构建 protobuf library:

首先打开 VS 2022 的命令行,后续命令都在这里面进行。

命令行工具

一定要记得自己使用的是 x64 还是 x86,后续项目要使用相同版本。

cd <protobuf-root-dir>
mkdir protobuf_build
cd protobuf_build
cmake -A x64 -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake
cmake --build . --config Release -j 2
cmake --build . --config Release --target install

cmake --build . --config Release -j 2 就是编译代码,2 是编译时使用的核数,可以根据自己 CPU 情况适当修改。

cmake --build . --config Release --target install 会将头文件、库文件放到当前目录的 install 目录下,后续编译代码设置头文件、库文件位置时就是这里。

构建 ncnn library(需要将 <protobuf-root-dir> 替换成你自己的目录):

cd <ncnn-root-dir>
mkdir protobuf_build
cd protobuf_build
cmake -A x64 -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_DIR=<protobuf-root-dir>/protobuf_build/install/cmake -DNCNN_VULKAN=ON ..
cmake --build . --config Release -j 2
cmake --build . --config Release --target install

运行

博主不会深度学习,示例代码仅代表能用 ncnn 库的东西。

#include "net.h"

int main() {
	ncnn::Net net;
	
	return 0;
}

下面是遇到的一些问题及解决方案:

代码说明
E1696无法打开源文件 “net.h”
C1083无法打开包括文件: “net.h”: No such file or directory

这个问题说的是找不到头文件,我们需要设置 VS 搜索头文件的路径。

右键项目 -> 属性 -> 配置属性 -> VC++ 目录 -> 包含目录

在包含目录中添加 ncnn 头文件的目录路径(…\install\include\ncnn)。

代码说明
LNK2019无法解析的外部符号 “public: __cdecl ncnn::Net::Net(void)”,函数 main 中引用了符号

这个是因为编译器找不到相应的实现,我们需要设置库路径和使用到的库。

右键项目 -> 属性 -> 配置属性 -> VC++ 目录 -> 库目录 添加库文件路径

右键项目 -> 属性 -> 链接器 -> 输入 -> 附加依赖项 添加 ncnn.lib

代码说明
LNK2038检测到 “_ITERATOR_DEBUG_LEVEL” 的不匹配项:值 0 不匹配值 2
LNK2038检测到 “RuntimeLibrary” 的不匹配项: 值 MD_DynamicRelease 不匹配值 MDd_DynamicDebug

这是因为项目是 Debug 版本,而我们编译的 ncnn 为 Release 版本。将项目版本切换与 ncnn 相同即可。

代码说明
LNK2001无法解析的外部符号 “bool __cdecl glslang::InitializaProcess(void)”

这个问题看起来与上面遇到的问题相似,于是我们在:

右键项目 -> 属性 -> 链接器 -> 输入 -> 附加依赖项

中将 …\install\lib 目录下 glslang 有关的库都添加到「附加依赖项」中。可是还是没有解决该问题,在将该目录下所有库文件都添加进去即可解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值