十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

在 Windows XP 上从源码编译 ncnn:虚拟机环境搭建、交叉工具链配置与三种编译路线实战指南

在 Windows XP 上从源码编译 ncnn:虚拟机环境搭建、交叉工具链配置与三种编译路线实战指南 人工智能深度学习推理引擎本地部署模型优化【免费下载链接】ncnnncnn is a high-performance neural network inference framework optimized for the mobile platform项目地址https://gitcode.com/gh_mirrors/nc/ncnn点击查看免费下载本篇技术指南以 ncnn 仓库官方文档 build-ncnn-on-windows-xp.zh.md 为核心骨架系统讲解如何在早已停止官方支持的 Windows XP 系统上完成 ncnn 的编译与测试。你将掌握完整的虚拟机环境准备、遗留工具链MinGW-w64 / Clang / Visual Studio v141_xp的选型与配置、三个仓库内置 XP 工具链文件的底层原理以及用 benchncnn 和 examples 批量验证编译产物是否可用的全套实战方法。一、为什么 ncnn 依然支持 Windows XPncnn 是面向移动端优化的高性能神经网络推理框架Windows XP 本身并不是其主战场但现实场景中仍有大量工业设备、收银终端、医疗仪器、嵌入式一体机运行着 Windows XP。为了让这些存量设备也能享受 ncnn 的推理能力仓库在toolchains/目录下专门提供了三套面向 Windows XP 的 CMake 工具链文件toolchains/windows-xp-mingw.toolchain.cmake基于 MinGW-w64 32 位工具链toolchains/windows-xp-clang.toolchain.cmake基于 Clang MinGW 头文件/库toolchains/windows-xp-msvc.toolchain.cmake基于 Visual Studio v141_xp 平台工具集与此同时根目录 CMakeLists.txt 中定义了NCNN_WINXP默认 OFF选项用于开启 Windows XP 兼容构建编译时生成的 src/platform.h.in 会根据该宏在内部切换平台相关 API 的实现路径。这三套工具链文件与主工程选项配合构成了 ncnn 在 Windows XP 上可编译、可运行的完整支持链路。说明本文以原文档的作者实践为基础Windows XP SP3 x64 虚拟机 Oracle VM VirtualBox内存 4GB存储 64GBC 盘 16GB / D 盘 48GB你可以根据自己的硬件条件调整虚拟机规格但请保持32 位工具链 关闭新指令集这一核心思路不变。二、环境准备2.1 虚拟机网络与共享配置原文档基于 Oracle VM VirtualBox 给出了非常具体的虚拟机配置步骤这些步骤直接影响后续能否在虚拟机内下载工具链、与主机互传文件联网在虚拟机关机状态下打开虚拟机管理器界面的设置 → 网络 → 高级将控制芯片改为PCnet-FAST III混杂模式设置为拒绝勾选接入网线保存后重启虚拟机即可联网。安装增强功能点击虚拟机界面设备 → 安装增强功能…在虚拟机我的电脑中刷新后会出现VirtualBox Guest Additions光驱右键选择自动播放完成安装并重启以获得更流畅的图形与剪贴板体验。共享剪贴板点击设备 → 共享粘贴板设置为双向方便在主机与虚拟机之间复制命令和路径。共享文件夹点击设备 → 共享文件夹 → 共享文件夹…添加主机文件夹勾选自动挂载和固定分配。完成后在虚拟机我的电脑中刷新会出现VBoxSvr上的共享目录双击即可双向传输文件——编译产物、模型文件的搬运都靠它。2.2 虚拟机内的开发工具链Windows XP 官方早已停止支持因此几乎所有现代工具都需要挑选最后的兼容版本工具版本要求用途浏览器Mypal 68务必选择 32 位版本访问互联网、下载工具解压工具Windows XP 自带 ZIP 解压解压下载的压缩包w64devkitx86 版本自解压 7z 文件提供 MinGW-w64 32 位编译器i686-w64-mingw32-gcc/gGit最后兼容版本 1.9.5拉取 ncnn 源码也可下载 ZIP 后在虚拟机解压Win32 OpenSSLWin32 OpenSSL Light 版本为 Git 提供 HTTPS 支持会附带安装 VC 2022 运行时库CMake最后支持 Windows XP 的版本 3.10.3win32-x86 zip生成构建系统环境变量配置在开始 → 控制面板 → 切换到经典视图 → 系统 → 高级 → 环境变量 → 系统变量中选择Path点击编辑在字符串末尾追加一个分号;然后粘贴 w64devkit 的bin目录路径CMake 的bin目录同理建议解压到C:\Program Files下。保存后在命令提示符中执行c --version、cmake --version即可验证环境变量是否生效。关于 Git 的提示如果因为协议、代理等问题无法在虚拟机中使用 Git可以改为在主机下载源码 ZIP 包通过共享文件夹传入虚拟机解压效果完全相同。三、编译 ncnn三种路线以下三种编译路线均以仓库根目录为起点先统一说明两个关键开关的语义它们在三套命令中反复出现-DNCNN_VULKANOFFVulkan SDK 最低要求 Windows 7 SP1XP 无法安装官方驱动和工具链必须关闭 Vulkan 计算支持CMakeLists.txt 中该选项默认即 OFF。-DNCNN_SIMPLEOCVON启用 ncnn 内置的极简 OpenCV 兼容实现。开启后cv::Mat等结构由 src/simpleocv.h 提供文件开头#if NCNN_SIMPLEOCV定义了一整套最小化的cv命名空间与Mat、imread等接口从而避免在 XP 上链接庞大的 OpenCV 依赖这是 examples 能够运行的前提。3.1 路线一MinGW-w64推荐首选在命令提示符中执行cd ncnn-root-dir mkdir build cd build cmake -DCMAKE_TOOLCHAIN_FILE../toolchains/windows-xp-mingw.toolchain.cmake -DNCNN_VULKANOFF -DNCNN_SIMPLEOCVON -DNCNN_AVXOFF -DCMAKE_BUILD_TYPERelease -G MinGW Makefiles .. make -j2 make install该路线使用 w64devkit 自带的 MinGW-w64 工具链。配套的 windows-xp-mingw.toolchain.cmake 揭示了底层细节需要预先设置环境变量MINGW32_ROOT_PATH指向 32 位 MinGW 工具链根目录否则 CMake 会直接FATAL_ERROR编译器被固定为i686-w64-mingw32-gcc.exe / g.exei686 32 位 x86C/C 编译标志统一追加-D_WIN32_WINNT0x05010x0501 即 Windows XP 的版本号告诉 Windows SDK 只暴露 XP 可用的 API、-marchi686生成不依赖新指令集的代码、-static静态链接避免运行时缺 DLL并-UMINGW_HAS_SECURE_API撤销 MinGW 的安全 API 重定义链接标志追加-static -fopenmp即强制静态链接并启用 OpenMP 多线程。3.2 路线二Clang先完成 3.1 的 MinGW-w64 环境配置Clang 需要借用 MinGW 的头文件与库再安装 Clang 6.0 或更高版本然后执行cd ncnn-root-dir mkdir build cd build cmake -DCMAKE_TOOLCHAIN_FILE../toolchains/windows-xp-clang.toolchain.cmake -DNCNN_SIMPLEOCVON -DNCNN_SIMPLEOMPON -DNCNN_AVXOFF -DCMAKE_BUILD_TYPERelease -G MinGW Makefiles .. make -j2 make install与 MinGW 路线的差异在于 windows-xp-clang.toolchain.cmake编译器为clang.exe / clang.exe归档器ar、ranlib仍取自MINGW32_ROOT_PATH编译标志使用--targeti686-pc-windows-gnu指定 32 位 Windows GNU 目标、--sysroot${MINGW32_ROOT_PATH}指向 MinGW 库并同样追加-D_WIN32_WINNT0x0501 -static链接标志仅使用-static不追加-fopenmp而是通过-DNCNN_SIMPLEOMPON启用 ncnn 自带的极简 OpenMP 运行时模拟CMakeLists.txt 中定义的NCNN_SIMPLEOMP选项避免依赖可能缺失的 OpenMP 运行库。3.3 路线三Visual StudioMSVC需要安装支持 Windows XP 的v141_xp平台工具集步骤为打开 Visual Studio 安装程序工具 → 获取工具和功能勾选使用 C 的桌面开发工作负载在右侧摘要部分勾选对 C 的 Windows XP 支持点击修改完成安装。然后在 Developer Command Prompt 中执行cd ncnn-root-dir mkdir build cd build cmake -A WIN32 -G Visual Studio 17 2022 -T v141_xp -DNCNN_SIMPLEOCVON -DNCNN_OPENMPOFF -DNCNN_AVXOFF -DNCNN_BUILD_WITH_STATIC_CRTON -DCMAKE_TOOLCHAIN_FILE../toolchains/windows-xp-msvc.toolchain.cmake .. cmake --build . --config Release -j 2 cmake --build . --config Release --target install配套的 windows-xp-msvc.toolchain.cmake 会自动完成以下约束无需手动传参设置CMAKE_SYSTEM_VERSION 5.1即 Windows XP并强制CMAKE_GENERATOR_TOOLSET v141_xp、CMAKE_GENERATOR_PLATFORM Win32编译标志追加/D_WIN32_WINNT0x0501 /DWINVER0x0501 /EHsc从 MSVC 一侧同样锁定 XP API 版本强制NCNN_VULKANOFF、NCNN_SIMPLEOCVON统一把可执行文件输出到build/bin、库文件输出到build/lib方便后续收集产物。命令行中另两个选项的含义-DNCNN_OPENMPOFF关闭 OpenMP避免 MSVC 在 XP 上的 OpenMP 运行时问题-DNCNN_BUILD_WITH_STATIC_CRTON让 ncnn 静态链接 C 运行时库对应 CMakeLists.txt 中NCNN_BUILD_WITH_STATIC_CRT的实现它把CMAKE_MSVC_RUNTIME_LIBRARY设为MultiThreaded系列这样目标机器无需安装 VC 运行库即可运行。四、编译产物验证与测试4.1 用 benchncnn 做推理性能冒烟测试benchncnn 是 ncnn 自带的网络推理性能测试程序源码见 benchmark/benchncnn.cpp它只需要网络的 param 结构定义文件不需要 bin 权重文件——权重会在内存中随机生成因此非常适合验证编译产物能否正确加载网络并完成前向推理。操作步骤将 benchmark/models 目录下的所有 param 文件复制到build/benchmark目录下在命令提示符中cd到build/benchmark运行benchncnn [测试的循环次数] [线程数] [节能模式]其中节能模式取值为 0 时关闭、为 1 时打开。结合 benchmark/README.md 中的参数表三个位置参数的含义可进一步展开为位置参数取值与含义1循环次数1~N默认 4循环次数越多统计越稳定2线程数1~N默认取 CPU 最大核数3节能模式powersave0使用全部核心1仅小核2仅大核XP 虚拟机场景下一般用 0每轮测试会输出每个网络的最小/最大/平均耗时ms例如squeezenet min 11.66 max 11.80 avg 11.74如果 benchncnn 能完整跑完 squeezenet、mobilenet、resnet 等一系列模型并打印出耗时统计说明 ncnn 库在 Windows XP 上已经正确编译并可正常执行卷积、池化、全连接等核心算子。4.2 用 examples 批量验证模型推理examples 目录下的各示例程序需要真实的parambin模型文件。原文档从 nihui/ncnn-assets 仓库的 models 目录获取全部模型其中需要注意ZF_faster_rcnn_final.bin对应的分卷压缩包.zip、.z01、.z02三个文件体积较大且分卷建议先在主机上解压出 bin 文件再通过共享文件夹传进虚拟机避免虚拟机内解压失败。将所有 param / bin 文件放入build/examples目录后可以用原文档作者提供的批处理脚本一键批量测试所有示例程序echo off setlocal enabledelayedexpansion set EXAMPLES_DIRncnn-root-dir\BUILD\EXAMPLES set IMAGE_PATHncnn-root-dir\IMAGES\256-ncnn.png set LOG_FILEtest_results.log echo NCNN Examples Test Results %LOG_FILE% echo %LOG_FILE% echo Test started: %date% %time% %LOG_FILE% echo. %LOG_FILE% for %%f in (%EXAMPLES_DIR%\*.exe) do ( set EXE_NAME%%~nf set EXE_PATH%%f echo Testing: !EXE_NAME! %LOG_FILE% echo -------------------------------- %LOG_FILE% !EXE_PATH! %IMAGE_PATH% %LOG_FILE% 21 if errorlevel 1 ( echo [ERROR] !EXE_NAME! failed to run. %LOG_FILE% ) else ( echo [SUCCESS] !EXE_NAME! completed. %LOG_FILE% ) echo. %LOG_FILE% ) echo Test finished: %date% %time% %LOG_FILE% echo Results saved to %LOG_FILE% endlocal使用要点把该脚本保存为.bat文件并放在build/examples目录下将脚本中所有的ncnn-root-dir替换为实际的 ncnn 根目录路径注意脚本中的路径写法是BUILD\EXAMPLES、IMAGES\256-ncnn.png这种 Windows 风格双击运行脚本会遍历目录下所有.exe用 images/256-ncnn.png 作为默认输入图片依次执行并把每个程序的退出码与输出写入test_results.log通过修改set IMAGE_PATHncnn-root-dir\IMAGES\256-ncnn.png这一行的路径可以更换测试图片最终查看test_results.log中每个示例的[SUCCESS]/[ERROR]标记即可了解全部模型的运行情况。五、关键选项速查与常见坑位CMake 选项本场景取值原因CMAKE_TOOLCHAIN_FILE../toolchains/windows-xp-*.toolchain.cmake三选一必须与已安装的工具链对应NCNN_VULKANOFFVulkan 最低要求 Win7 SP1XP 无驱动与 SDKNCNN_SIMPLEOCVON用 src/simpleocv.h 的内置极简 OpenCV 替代外部 OpenCVNCNN_AVXOFFXP 时代 CPU 普遍不支持 AVX且 AVX 指令需要较新的系统/驱动支持NCNN_SIMPLEOMPClang 路线ON用内置极简 OpenMP 运行时规避运行库缺失NCNN_OPENMPMSVC 路线OFF规避 MSVC 在 XP 上的 OpenMP 运行时问题NCNN_BUILD_WITH_STATIC_CRTMSVC 路线ON静态链接 CRT目标机免装 VC 运行库几个反复出现的坑位总结环境变量必须配好MINGW32_ROOT_PATHMinGW / Clang 路线或Pathw64devkit 的 bin 与 CMake 的 bin遗漏会在 CMake 配置阶段直接报错。不要跳过 32 位约束三套工具链文件全部锁定i686/Win32目标强行用 64 位工具链会破坏 XP 兼容性。_WIN32_WINNT0x0501是兼容性的命门三套工具链都用它把 API 面收缩到 Windows XPNT 5.1级别这是编译出来能在 XP 上跑的底层保证见 src/platform.h.in 中NCNN_WINXP宏的分支处理。测试输入路径统一用 Windows 风格bat 脚本与 benchncnn 均在 Windows 命令提示符下运行路径分隔符与大小写规范以脚本注释为准。至此你已经可以在 Windows XP 虚拟机中完成 ncnn 的完整编译、安装与功能验证。无论最终选择 MinGW-w64、Clang 还是 MSVC v141_xp 路线只要遵循32 位工具链 关闭 Vulkan/AVX 启用 SIMPLEOCV三原则即可在 XP 上获得可用的 ncnn 推理运行时更深入的源码阅读可以继续参考仓库中的 benchmark/README.mdbenchncnn 完整参数与多平台实测输出与 toolchains 目录下的各平台工具链文件。赞分享人工智能深度学习推理引擎本地部署模型优化【免费下载链接】ncnnncnn is a high-performance neural network inference framework optimized for the mobile platform项目地址https://gitcode.com/gh_mirrors/nc/ncnn点击查看免费下载相关推荐【免费下载】 飞腾交叉编译环境搭建之交叉编译工具链配置飞腾交叉编译环境搭建之交叉编译工具链配置 简介 本文档旨在指导开发者如何为飞腾处理器搭建高效的交叉编译环境特别聚焦于交叉编译工具链的配置。飞腾处理器以其在国产mpv 在 Windows 上的编译完整指南MinGW-w64 交叉编译、Clang(Windows SDK) 与 MSYS2 三种构建路径详解mpv 在 Windows 上的编译完整指南MinGW w64 交叉编译、Clang Windows SDK 与 MSYS2 三种构建路径详解 本篇技术指南以音视频视频音频eCapture 编译指南从环境搭建到交叉编译与 eBPF 原理eCapture 编译指南从环境搭建到交叉编译与 eBPF 原理 eCapture旁观者是一款基于 eBPF 的 SSL/TLS 明文捕获工具无需 CA网络安全网络可观测性系统编程上一篇从脚本到Notionmd2notion Python API实战教程下一篇Node.js 0.10.9Stable发布解读npm 1.2.24、libuv 0.10.9 与 TLS/REPL 修复全览创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表