windows visual studio 2022 下ncnn编译运行

Home / C++ MrLee 15小时前 14

ncnn

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

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

编译

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

git clone https://github.com/Tencent/ncnn.git
cd ncnn

点击链接 protobuf-3.11.2 下载 protobuf

构建 protobuf library:

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

命令行工具

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

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 12
cmake --build . --config Debug -j 12
cmake --build . --config Release --target install
cmake --build . --config Debug --target install

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

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

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

cd <ncnn-root-dir>
mkdir build
cd build
cmake -A x64 -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_DIR=D:/ncnn/protobuf-3.11.2/protobuf_build/install/cmake -DNCNN_VULKAN=OFF ..
cmake --build . --config Release -j 12
cmake --build . --config Release --target install
cmake --build . --config Debug -j 12

博主不会深度学习,示例代码仅代表能用 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 有关的库都添加到「附加依赖项」中。可是还是没有解决该问题,在将该目录下所有库文件都添加进去即可解决。

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


cd <ncnn-root-dir>
mkdir build
cd build
cmake -A x64 -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_DIR=D:/ncnn/protobuf-3.11.2/builds/install/cmake -DNCNN_VULKAN=OFF ..
cmake --build . --config Release -j 12
cmake --build . --config Release --target install
cmake --build . --config Debug -j 12
cmake --build . --config Debug --target install
查看.lib库信息 MT、MD
dumpbin /directives

本文链接:https://it72.com/12801.htm

上传的附件:
推荐阅读
最新回复 (0)
返回