
ZeroTierOne Linux 交叉编译5 步在 Linux 上产出 Windows x64 虚拟网络守护进程【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOneZeroTierOne 是一个 P2P 虚拟网络守护进程它穿透 NAT 把分散各处的设备拉进同一张虚拟局域网。官方 Windows 构建走的是 MSVC 路线但你完全可以用 mingw-w64 交叉工具链在 Linux 上得到同样的zerotier-one.exe。这套流程面向第一次接触交叉编译的读者工具链安装、依赖准备、编译、验证每一步都给了可直接复制的命令。做完后你手里会有一个能直接放到 Windows 机器上运行的 x64 版守护进程。一分钟看懂目标一句话说清交叉编译就是在一台机器上运行编译器、产出另一台机器可执行的程序mingw-w64 是 GCC 体系下模拟 Windows 运行时的编译器加 API 库组合。输入ZeroTierOne 源码 一台 Linux x86_64 主机产出zerotier-one.exeWindows x64 用户态守护进程同时是服务程序不产出windows/TapDriver6/ 里的 TAP 内核驱动它必须用 WDK 单独构建动手前核对清单工具作用验证命令mingw-w64x86_64 版交叉编译器 Windows API 库x86_64-w64-mingw32-gcc --versionCMake ≥ 3.15建议 ≥ 3.21构建系统生成器cmake --versionNinja依赖引导脚本使用的构建工具ninja --versiongit获取源码git --versionRust cargo编译 rustybits 静态库cargo --versionRust targetx86_64-pc-windows-msvcrustybits 的 Windows 目标三元组rustup target list --installedWine可选在 Linux 上试跑 exewine --versionUbuntu/Debian 上一条命令装好大部分sudo apt install -y mingw-w64 cmake ninja-build git wineRust 单独安装并追加目标curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh rustup target add x86_64-pc-windows-msvc成功的样子上面每一条验证命令都能打印版本号而不是command not found。执行流程步骤 1获取源码先把源码落到磁盘上。git clone https://gitcode.com/GitHub_Trending/ze/ZeroTierOne cd ZeroTierOne成功的样子当前目录出现 CMakeLists.txt 和 scripts/bootstrap-deps.sh。步骤 2准备头文件版 OpenTelemetry 依赖CMake 脚本要求 opentelemetry-cpp 的 API 能在依赖前缀里找到仓库自带引导脚本默认安装到.deps。scripts/bootstrap-deps.sh成功的样子脚本末尾打印 Done (API-only). Build the daemon with:并且.deps下出现lib/cmake/opentelemetry-cpp或lib64变体。步骤 3编写 mingw-w64 工具链文件CMake 需要一份工具链文件声明目标是 Windows、用哪套编译器。在源码根目录新建toolchain-mingw64.cmakeset(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_PROCESSOR x86_64) set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g) set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)成功的样子文件保存无误。CMAKE_SYSTEM_PROCESSOR必须显式指定否则架构检测可能命中 CMakeLists.txt 里的Unsupported/undetected CPU architecture致命错误。步骤 4配置构建cmake -S . -B build-win \ -DCMAKE_TOOLCHAIN_FILEtoolchain-mingw64.cmake \ -DCMAKE_BUILD_TYPERelease \ -DCMAKE_PREFIX_PATH$PWD/.deps成功的样子输出以-- Build files written to: .../build-win结尾全程没有CMake Error。步骤 5编译cmake --build build-win -j$(nproc)成功的样子 build-win目录下生成zerotier-one.exe。编译过程中会自动经 cargo 构建 rustybits 静态库耗时稍长属正常。坑点与要点现象链接报undefined reference to WSAStartup。原因没走 mingw 工具链误用主机 gcc或动过链接列表。处理确认编译器是x86_64-w64-mingw32-gWindows 目标下 CMake 已自动追加ws2_32、wsock32、Iphlpapi等系统库保持默认即可。现象配置阶段报opentelemetry-cpp (API) was not found on CMAKE_PREFIX_PATH。原因没跑步骤 2 的引导脚本或配置时没把前缀传进去。处理先执行scripts/bootstrap-deps.sh再带上-DCMAKE_PREFIX_PATH$PWD/.deps重新配置。现象ZT1_CENTRAL_CONTROLLER is not supported on Windows。原因打开了中央控制器选项。处理Windows 目标只支持守护进程去掉-DZT1_CENTRAL_CONTROLLER。现象cargo: command not found或找不到rustybits.lib。原因Rust 未安装或缺目标三元组。处理装好 rustup 后执行rustup target add x86_64-pc-windows-msvc。要点组件原理Windows 下 one.cpp 会把 windows/ZeroTierOne/ 的服务封装一起编进同一个可执行文件。所以zerotier-one.exe本身就是服务程序装成服务前也可以直接命令行方式试跑。要点组件原理windows/TapDriver6/ 是内核态 TAP 驱动无法用 mingw 交叉产出。真机测试可以临时关闭驱动签名强制正式发布必须签名 ⚠️。验证你的成果一条命令确认产物格式file build-win/zerotier-one.exe预期输出片段关键看开头的PE32与x86-64build-win/zerotier-one.exe: PE32 executable (console) x86-64, ...装了 Wine 的话可以补跑一次帮助信息出现Usage: zerotier-one [-switches] [home directory]即正常完整参数说明见 doc/zerotier-one.8.md。常见问题Q1为什么没有 zerotier-selftest.exe是不是构建失败了不是。selftest 在 Windows 平台本来就不构建CMake 里有明确的NOT WIN32跳过逻辑缺少这个产物属于预期行为。Q2为什么不用 CMakePresets.json 里的 windows-x64 预设那组预设为原生 Windows 准备生成器是 Visual Studio 17、依赖 vcpkg且condition只在 Windows 主机上生效。在 Linux 上预设列表里根本不会出现它所以走工具链文件方案。Q3默认构建和-DZT_NONFREEOFF有什么区别默认会把内置的 FileDB 网络控制器编译进守护进程传 OFF 得到不带控制器的免费版体积更小。各平台在 CMakePresets.json 里都配了对应的*-free预设可作参考。收尾到这里你已能在 Linux 服务器上产出 Windows 版 ZeroTierOne 守护进程全程无需打开一台 Windows 机器。想再进一步可以试-DZT_NONFREEOFF的轻量构建版本差异查阅 RELEASE-NOTES.md。觉得这套流程有用的话顺手点个关注后续继续更新其他平台的交叉编译实践。【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOne创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考