news 2026/8/23 19:17:16

Windows下MinGW-w64编译Boost库全攻略:从工具链配置到CMake集成

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows下MinGW-w64编译Boost库全攻略:从工具链配置到CMake集成

1. 项目缘起:为什么要在Windows上折腾Boost和MinGW?

如果你是一个C++开发者,尤其是在Windows平台上,那么你大概率遇到过这样的困境:项目依赖一个强大的第三方库,比如Boost,但你的开发环境是MinGW(GCC的Windows移植版),而不是微软自家的MSVC。这时候,安装和配置就成了第一道拦路虎。网上教程五花八门,有的让你用MSVC编译,有的让你用MinGW-w64,还有的直接丢给你一个预编译包,但版本对不上或者链接时一堆“undefined reference”错误,让人头大。

我最近接手一个跨平台项目,核心逻辑严重依赖Boost.Asio和Boost.Serialization。在Linux和macOS上,用包管理器(apt-getbrew)一行命令就能搞定。但一到Windows,环境就变得复杂起来。团队里有人用Visual Studio,有人用CLion+MinGW,还有人用VSCode。为了统一开发环境,减少“在我机器上是好的”这类问题,我决定彻底梳理一遍在Windows上,为MinGW(特别是MinGW-w64)编译和安装Boost库的完整流程。这不仅仅是“安装”,更是理解工具链如何协同工作,以及如何构建一个可复现、可移植的构建环境。

这个过程涉及几个核心组件:MinGW-w64(提供GCC编译器和工具链)、Boost库源码、以及构建系统(通常是Boost.Build或CMake)。很多人卡在第一步——下载了错误的MinGW版本,或者试图用MSVC编译的Boost库给MinGW链接,这注定会失败。本文将手把手带你走通这条路,并解释清楚每一个选择背后的原因,让你不仅能把环境搭起来,更能明白其中的门道,未来遇到类似问题能自行排查。

2. 工具链基石:MinGW-w64的选型、安装与验证

在Windows上使用GCC,MinGW-w64是事实上的标准,它比古老的MinGW项目更活跃,支持更新的标准,并且同时提供32位和64位工具链。第一步的选型至关重要。

2.1 为什么是MinGW-w64,而不是MSVC或Cygwin?

首先明确我们的目标:我们需要一个能在Windows上生成原生Windows可执行文件的GCC工具链。MSVC是微软的“亲儿子”,生态好,但对C++新标准的支持有时滞后,且其ABI(应用二进制接口)与GCC不兼容。这意味着用MSVC编译的库(比如一些预编译的Boost二进制包)无法直接链接到MinGW/GCC编译的程序中,反之亦然。这就是为什么我们不能简单地从Boost官网下载那个针对MSVC的预编译包。

Cygwin则提供了另一个思路:它试图在Windows上模拟一个POSIX环境(类似Linux),其编译的程序需要依赖一个特殊的cygwin1.dll运行时库。这虽然能运行很多Linux程序,但生成的不是纯粹的原生Windows程序,在部署和性能上可能带来额外复杂度。因此,对于追求原生性能和干净部署的C++项目,MinGW-w64是更合适的选择。

MinGW-w64本身又有多个发行版,常见的有:

  1. MSYS2提供的MinGW-w64:这是目前最推荐的方式。MSYS2是一个软件分发和构建平台,它提供了pacman包管理器(源自Arch Linux),可以轻松安装、更新和管理包括MinGW-w64在内的成千上万个软件包。它的优势在于依赖管理清晰,环境隔离做得好,并且社区活跃。
  2. WinLibs独立构建版:这是一个个人维护的、集成了最新GCC和LLVM/Clang的便携式工具链。解压即用,无需安装,适合快速测试或希望完全便携的场景。
  3. 官方源码编译:最硬核的方式,但普通开发者无需考虑。

对于绝大多数开发场景,选择MSYS2是最稳妥、最可持续的方案。它不仅能安装GCC,还能方便地安装makecmakegitpython等一整套开发工具,形成一个完整的开发环境。

2.2 通过MSYS2安装并配置MinGW-w64

以下是详细步骤和原理说明:

  1. 下载并安装MSYS2: 访问 MSYS2官网 ,下载安装程序。安装路径建议选择没有空格和中文的路径,例如C:\msys64。这是很多构建系统的硬性要求,可以避免后续无数诡异的路径问题。

  2. 启动MSYS2终端并更新包数据库: 安装完成后,从开始菜单找到“MSYS2 UCRT64”并启动。这里简单解释一下几个不同的终端:

    • MSYS2 MSYS: 使用MSYS运行时,主要用于构建MSYS2自身的软件包,其路径风格为/c/msys64这种Unix风格。
    • MSYS2 MINGW64: 使用MinGW-w64运行时,目标为64位程序,使用传统的MSVCRT运行时库。路径风格为C:\msys64\mingw64这样的Windows风格。
    • MSYS2 UCRT64: 同样使用MinGW-w64运行时,目标为64位程序,但使用更新的UCRT(Universal C Runtime)运行时库。这是Windows 10及以后版本推荐的运行时,兼容性更好。我们选择这个
    • MSYS2 CLANG64: 使用Clang编译器。

    在UCRT64终端中,首先更新软件包数据库和基础包:

    pacman -Syu

    这个命令会同步包列表并升级所有已安装的包。过程中可能会提示你关闭终端,按照提示操作,重新打开终端再次运行pacman -Syu直到系统完全更新。

  3. 安装MinGW-w64工具链: 系统更新完毕后,安装我们需要的开发工具链:

    pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

    base-devel包含make,autoconf,automake等基础开发工具。mingw-w64-ucrt-x86_64-toolchain这个元包会安装GCC编译器、GDB调试器、binutils(链接器、汇编器等)等一系列工具。

  4. 验证安装并配置系统环境变量: 安装完成后,在MSYS2 UCRT64终端中输入:

    gcc --version g++ --version gdb --version

    应该能正确输出版本信息。

    为了让Windows的命令行(CMD或PowerShell)以及VSCode等编辑器也能使用这些工具,需要将MinGW-w64的bin目录添加到系统的PATH环境变量中。

    • 找到你的MSYS2安装目录下的ucrt64\bin文件夹,例如C:\msys64\ucrt64\bin
    • 将此路径添加到系统的PATH环境变量中(用户变量或系统变量均可)。
    • 重要提示:添加后,务必重新启动任何已经打开的CMD或PowerShell窗口,新的PATH才会生效。

    验证系统环境变量是否生效:打开一个新的CMD或PowerShell,输入gcc --version,应该能看到与MSYS2终端内相同的输出。

注意:一个常见的坑是系统里安装了多个GCC(比如之前装过Cygwin或别的MinGW),导致PATH冲突。你可以在CMD中运行where gcc来查看当前找到的gcc.exe的完整路径,确保它指向的是你刚安装的ucrt64\bin目录下的那个。

3. 编译基石:获取与构建Boost库源码

Boost库大部分是“头文件库”(Header-only),如Boost.Asio(大部分功能)、Boost.Variant等,直接包含头文件即可使用。但也有一些库需要编译成静态库(.a)或动态库(.dll)才能使用,例如:

  • boost_filesystem
  • boost_system
  • boost_thread
  • boost_chrono
  • boost_serialization
  • boost_python(如果你需要Python绑定)

因此,我们通常需要编译Boost。下面是从源码编译的完整过程。

3.1 下载与准备Boost源码

  1. 下载源码: 前往 Boost官网 下载最新版本的源码包(例如boost_1_85_0.tar.gz.zip)。建议下载.tar.gz格式,因为在MSYS2环境下解压更方便。将其下载到一个合适的目录,例如C:\Libraries

  2. 解压源码: 在MSYS2 UCRT64终端中,导航到下载目录并解压:

    cd /c/Libraries tar -xzf boost_1_85_0.tar.gz cd boost_1_85_0

    使用/c/Libraries这样的路径是MSYS2终端的Unix风格路径表示法,它对应Windows的C:\Libraries

3.2 使用Boost.Build (b2) 进行编译

Boost自带了一套构建系统,叫Boost.Build,其驱动脚本是bootstrap.bat(Windows批处理)或bootstrap.sh(Unix shell)。在MSYS2环境下,我们使用.sh脚本。

  1. 生成b2构建工具

    ./bootstrap.sh

    这个命令会在当前目录生成b2.exe(或b2) 这个构建工具。它还会生成一个project-config.jam文件,用于配置构建参数。

  2. 关键:配置project-config.jam以使用正确的工具链: 这是最核心的一步,决定了Boost库被哪个编译器编译。用文本编辑器打开project-config.jam文件(位于Boost源码根目录)。默认内容可能指定了MSVC。我们需要将其修改为使用我们的MinGW-w64 (UCRT) GCC。

    找到类似using msvc ;的行,将其注释掉或删除,然后添加以下内容:

    using gcc : : g++ ;

    这行配置告诉Boost.Build:使用名为“gcc”的工具集,其编译器命令是g++(它会自动在PATH中查找)。由于我们已将ucrt64\bin加入PATHb2就能找到正确的GCC。

    更明确的配置可以指定编译器的完整路径和版本:

    using gcc : : C:/msys64/ucrt64/bin/g++ ;

    但通常只要PATH设置正确,简单的using gcc ;就足够了。

  3. 执行编译: 现在可以运行b2命令来编译所需的库。一个典型的编译命令如下:

    ./b2 toolset=gcc variant=release link=static,shared threading=multi runtime-link=shared --prefix=/c/Libraries/boost_1_85_0_install install

    让我们分解这个命令的每个部分:

    • toolset=gcc: 指定使用GCC工具链。这与project-config.jam中的配置对应。
    • variant=release: 编译发布版本(优化)。你也可以用variant=debug编译调试版,或者variant=release,debug同时编译两种。
    • link=static,shared: 同时生成静态库(.a)和动态库(.dll)。你可以根据需要只选一种。
    • threading=multi: 生成支持多线程的库。这是现代应用的标配。
    • runtime-link=shared: 链接到C/C++运行时的动态库(libgcc_s_seh-1.dll,libstdc++-6.dll等)。这样生成的可执行文件更小,但部署时需要带上这些DLL。runtime-link=static会将运行时库静态链接进去,生成更大的独立可执行文件。
    • --prefix=/c/Libraries/boost_1_85_0_install: 指定安装目录。编译完成后,b2会将头文件和库文件安装到这个目录。强烈建议指定一个独立的安装目录,与源码目录分开,这样以后可以干净地删除源码或安装多个版本。
    • install: 这个目标表示执行编译和安装。

    这个编译过程会持续较长时间(取决于你的CPU和需要编译的库数量)。你可以通过-jN参数指定并行编译的作业数来加速,例如-j8表示使用8个并行任务。

  4. 编译后的成果: 编译安装完成后,前往你指定的--prefix目录(例如C:\Libraries\boost_1_85_0_install),你会看到如下结构:

    boost_1_85_0_install/ ├── include/ │ └── boost/ # 所有的Boost头文件 └── lib/ ├── libboost_*.a # 静态库文件 (用于静态链接) └── libboost_*.dll.a # 动态库的导入库文件 (用于链接动态库)

    同时,动态库文件(.dll)通常会被复制到lib目录下,或者位于stage/lib目录下(如果你使用stage安装方式)。

实操心得:第一次编译时,建议先只编译少数几个必需的库来测试环境。可以使用--with-library_name参数,例如--with-filesystem --with-system只编译这两个库。这能大大缩短编译时间,快速验证你的配置是否正确。如果编译成功,再移除这些限制进行全库编译。

4. 项目集成:在CMake项目中链接Boost库

现在,我们有了编译好的Boost库和MinGW-w64 GCC编译器。接下来是如何在一个实际项目(以CMake为例)中使用它们。

4.1 项目结构与环境变量

假设你的项目结构如下:

MyProject/ ├── CMakeLists.txt ├── src/ │ └── main.cpp └── build/ # 用于构建的目录

为了让CMake能找到Boost,最推荐的方法是设置BOOST_ROOT环境变量,指向你的Boost安装目录(即--prefix指定的目录)。

# 在CMD或PowerShell中设置(临时) set BOOST_ROOT=C:\Libraries\boost_1_85_0_install # 或者在MSYS2终端中(临时) export BOOST_ROOT=/c/Libraries/boost_1_85_0_install

更一劳永逸的方法是将BOOST_ROOT添加到系统的用户环境变量中。

4.2 编写CMakeLists.txt

一个基本的CMakeLists.txt文件内容如下:

cmake_minimum_required(VERSION 3.10) project(MyBoostProject LANGUAGES CXX) # 设置C++标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 告诉CMake寻找Boost库。 # COMPONENTS 后面列出你需要链接的、需要编译的库(如filesystem, system)。 # 对于纯头文件库,不需要在这里列出。 find_package(Boost 1.85.0 REQUIRED COMPONENTS filesystem system) # 如果find_package成功,以下变量会被设置: # Boost_INCLUDE_DIRS - Boost头文件目录 # Boost_LIBRARY_DIRS - Boost库文件目录 # Boost_LIBRARIES - 需要链接的库的全路径列表 # 添加可执行文件 add_executable(my_app src/main.cpp) # 为你的目标链接Boost库和头文件 target_include_directories(my_app PRIVATE ${Boost_INCLUDE_DIRS}) target_link_libraries(my_app PRIVATE ${Boost_LIBRARIES}) # 如果你链接的是动态库(.dll),在Windows上可能需要将DLL复制到可执行文件旁边。 # 以下是一个示例,将找到的Boost动态库复制到输出目录(可选)。 if(WIN32 AND Boost_USE_STATIC_LIBS STREQUAL "OFF") add_custom_command(TARGET my_app POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${Boost_LIBRARY_DIRS}/libboost_filesystem-*.dll" "${Boost_LIBRARY_DIRS}/libboost_system-*.dll" $<TARGET_FILE_DIR:my_app> ) endif()

4.3 配置与构建项目

build目录中,使用CMake配置项目并指定生成器为MinGW Makefiles。

cd MyProject mkdir build && cd build # 关键:指定生成器为 MinGW Makefiles cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release .. # 然后进行构建 cmake --build . --config Release

关键点解析

  • -G "MinGW Makefiles": 这告诉CMake生成用于mingw32-make的Makefile。如果你在MSYS2环境中使用标准的make,有时也可以使用-G "MSYS Makefiles",但"MinGW Makefiles"兼容性更广。
  • -DCMAKE_BUILD_TYPE=Release: 指定构建类型为发布模式。CMake会去寻找Release版本的Boost库(libboost_*.alibboost_*.dll.a)。
  • find_package(Boost ...): CMake会首先检查BOOST_ROOT环境变量,然后搜索一系列默认路径来定位Boost。如果找不到,你需要通过-DBOOST_ROOT=...参数直接传递给CMake命令。

如果一切顺利,你将在build目录下得到my_app.exe。如果链接的是动态库,请确保相应的boost_*.dll文件与my_app.exe在同一目录下,或者在系统的PATH环境变量中。

5. 疑难杂症与深度排错指南

即使按照步骤操作,你也可能会遇到各种问题。下面是一些常见错误及其排查思路。

5.1 编译Boost时的典型错误

错误1:permission deniedcannot create directory

  • 原因: 你可能在受保护的目录(如C:\Program Files)下进行编译,或者之前的编译进程未完全退出。
  • 解决: 将Boost源码解压到用户有完全控制权的目录,如C:\Users\YourName\LibrariesD:\Dev。关闭所有可能占用文件的终端或编辑器,重新尝试。

错误2:g++: command not found

  • 原因bootstrap.shb2没有在正确的环境中运行,或者PATH环境变量未包含MinGW-w64的bin目录。
  • 解决: 确保你在MSYS2 UCRT64终端中运行这些命令,并且已通过pacman成功安装了mingw-w64-ucrt-x86_64-toolchain。在终端内运行which g++确认路径。

错误3:链接错误undefined reference toboost::system::generic_category()`

  • 原因: 这是最经典的错误。它意味着你的程序成功包含了Boost头文件,但在链接阶段找不到对应的库文件(libboost_system)。可能的原因有:
    1. 你使用了需要编译的Boost组件(如system,filesystem),但没有在find_packageCOMPONENTS中列出它。
    2. 你列出了组件,但CMake找不到对应库文件。可能是BOOST_ROOT设置错误,或者编译Boost时没有生成该库的对应版本(如只编译了静态库但CMake在找动态库)。
    3. 你编译的Boost库版本(如Release/Debug)与你的项目配置不匹配。
  • 排查
    1. 检查CMakeCache.txt文件(在build目录下),搜索Boost_,查看Boost_INCLUDE_DIR,Boost_LIBRARY_DIR_*,Boost_*_LIBRARY等变量是否被正确设置。
    2. 手动去$BOOST_ROOT/lib目录下查看,是否存在libboost_system-mt.a(静态多线程)或libboost_system-mt.dll.a(动态库导入库)等文件。
    3. 在CMake配置时,增加-DBoost_DEBUG=ON参数,CMake会输出详细的查找日志。
    cmake -G "MinGW Makefiles" -DBoost_DEBUG=ON -DBOOST_ROOT=... ..

5.2 CMake配置阶段的典型错误

错误:Could not find a package configuration file provided by "Boost"

  • 原因: CMake的FindBoost.cmake模块版本可能较旧,不支持你安装的Boost新版本。或者你的Boost安装目录结构不符合CMake的预期(例如,你直接使用了源码目录,而非安装目录)。
  • 解决
    1. 确保你指向的是Boost的安装目录(包含include/boostlib子目录),而不是源码目录。
    2. 升级你的CMake到较新版本。
    3. 如果必须使用旧版CMake,可以尝试手动指定路径:
      set(Boost_INCLUDE_DIR "C:/Libraries/boost_1_85_0_install/include") set(Boost_LIBRARY_DIR "C:/Libraries/boost_1_85_0_install/lib") # 然后手动创建 target_link_libraries 所需的库列表 target_link_libraries(my_app PRIVATE ${Boost_LIBRARY_DIR}/libboost_filesystem-mt.a ${Boost_LIBRARY_DIR}/libboost_system-mt.a )
      这种方法不够优雅,且需要处理库名后缀(如-mt)和静态/动态库的区别。

5.3 运行时错误

错误:The code execution cannot proceed because libboost_filesystem-*.dll was not found.

  • 原因: 你以动态链接(link=shared)的方式使用了Boost库,但生成的DLL文件不在可执行文件的搜索路径中。
  • 解决
    1. (推荐)将所需的boost_*.dll文件从$BOOST_ROOT/lib目录复制到你的my_app.exe所在的目录。
    2. $BOOST_ROOT/lib目录添加到系统的PATH环境变量中(不推荐长期这样做,可能引起版本冲突)。
    3. 改用静态链接(在编译Boost时使用link=static,在CMake中设置-DBoost_USE_STATIC_LIBS=ON)。这样会将库代码直接打包进你的exe,部署更简单,但文件体积会变大。

6. 进阶配置与优化建议

当基础环境搭建成功后,可以考虑一些优化和最佳实践。

6.1 使用Vcpkg或Conan进行依赖管理

手动编译和管理Boost库虽然能让你理解底层过程,但对于大型项目或团队协作,依赖管理工具能极大提升效率。

  • Vcpkg: 微软开源的C++库管理工具。安装Vcpkg后,只需一条命令即可安装Boost(包含MinGW-w64版本):

    # 在Vcpkg目录下 .\vcpkg install boost:x64-mingw-dynamic

    Vcpkg会自动处理下载、编译、安装,并集成到CMake中(通过工具链文件-DCMAKE_TOOLCHAIN_FILE=[vcpkg-root]/scripts/buildsystems/vcpkg.cmake)。

  • Conan: 一个更通用的C/C++包管理器。你需要编写conanfile.txt来描述依赖,然后Conan会从中央仓库下载预编译的二进制包(如果存在且匹配你的profile)或从源码编译。

使用这些工具可以将你从繁琐的编译配置中解放出来,更专注于业务代码。但了解底层编译过程,对于调试工具链问题和理解构建系统仍然至关重要。

6.2 为不同构建类型(Debug/Release)管理Boost库

在实际开发中,我们通常需要Debug和Release两种版本的库。建议采用以下目录结构来组织:

C:\Libraries\ ├── boost_1_85_0_msvc/ # 源码目录(如果需要也为MSVC编译) ├── boost_1_85_0_mingw/ # 源码目录(为MinGW编译) ├── boost_1_85_0_mingw_install/ │ ├── debug/ # Debug版本安装目录 │ │ ├── include/ │ │ └── lib/ │ └── release/ # Release版本安装目录 │ ├── include/ │ └── lib/ └── boost_1_85_0_msvc_install/ # MSVC版本安装目录(如果需要)

在编译Boost时,通过variant=debugvariant=release分别编译,并使用不同的--prefix路径进行安装。在CMake中,find_package会根据CMAKE_BUILD_TYPE自动选择对应版本的库。如果你需要同时支持多配置生成器(如Visual Studio),则需要更复杂的设置,通常通过Boost_USE_DEBUG_LIBS等变量来控制。

6.3 在IDE中配置(以VSCode为例)

如果你使用VSCode进行开发,结合CMake Tools扩展,可以非常方便地管理基于MinGW和Boost的项目。

  1. 在项目根目录创建.vscode/settings.json,可以指定CMake工具链和构建目录:
    { "cmake.configureSettings": { "CMAKE_BUILD_TYPE": "Debug", "BOOST_ROOT": "C:/Libraries/boost_1_85_0_mingw_install/debug" // 根据构建类型调整 }, "cmake.generator": "MinGW Makefiles", "cmake.buildDirectory": "${workspaceFolder}/build/${buildType}" }
  2. .vscode/c_cpp_properties.json中配置IntelliSense的包含路径:
    { "configurations": [ { "name": "MinGW", "includePath": [ "${workspaceFolder}/**", "C:/Libraries/boost_1_85_0_mingw_install/debug/include" ], "compilerPath": "C:/msys64/ucrt64/bin/g++.exe" } ], "version": 4 }

这样,你就可以在VSCode中享受代码补全、跳转、以及一键编译调试的体验了。整个流程走下来,从工具链选型、源码编译、项目集成到疑难排错,构成了在Windows上使用MinGW和Boost的一个完整闭环。理解了这个流程,你不仅能够搭建环境,更能从容应对其中可能出现的各种挑战。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 19:17:05

嵌入式物联网工程师学习路径规划:从STM32到Linux的实战指南

1. 项目概述&#xff1a;从“慕慕课体系”到个人技术栈的构建最近在技术社区里&#xff0c;看到不少朋友在讨论“慕慕课体系物联网/嵌入式工程师”这套课程资源。作为一个在嵌入式行业摸爬滚打了十多年的老鸟&#xff0c;我特别理解大家的心情——面对海量的学习资料&#xff0…

作者头像 李华
网站建设 2026/8/23 19:16:54

从零搭建稳定模组环境:以泰拉瑞亚灾厄Mod为例的系统工程指南

如果你在某个游戏社区里问“现在有什么值得花时间的大型模组”&#xff0c;大概率会有人提到“灾厄”。但紧接着&#xff0c;你可能会看到一连串更具体的问题&#xff1a;“1.4.4 和 1.4.3 的灾厄能一起玩吗&#xff1f;”“汉化包怎么装总是失败&#xff1f;”“为什么我装了之…

作者头像 李华
网站建设 2026/8/23 19:15:29

电梯控制中应用八分之一三阶滤波器系数优化攻略

摘要:本文深入解析八分之一三阶滤波器在电梯速度环中的选型与应用。通过对比典型系数组合的幅频/相频响应,揭示系数与性能的映射关系,提供从性能权衡、噪声分析到阶梯测试的完整选型流程。涵盖PID补偿、C语言实现、现场调试及自适应策略,助力工程师实现平稳、高效、舒适的电…

作者头像 李华
网站建设 2026/8/23 19:12:36

什么是多模态?多模态大模型综述,看这一篇就够了

什么是多模态&#xff1f;多模态大模型综述&#xff0c;看这一篇就够了 多模态大型语言模型&#xff08;Multimodal Large Language Models&#xff0c; MLLM&#xff09;的出现是建立在大型语言模型&#xff08;Large Language Models&#xff0c; LLM&#xff09;和大型视觉模…

作者头像 李华
网站建设 2026/8/23 19:09:53

三角洲如何获得乌鲁鲁 三角洲行动乌鲁鲁获取方法

三角洲如何获得乌鲁鲁&#xff1f;很多新玩家都在探寻这名工程兵干员的解锁方式&#xff0c;乌鲁鲁凭借巡飞弹、速凝掩体&#xff0c;在据点攻防中实用性很高。下面为你介绍三角洲如何获得乌鲁鲁&#xff0c;不需要抽卡&#xff0c;完成一系列指定任务即可解锁。不过任务需要反…

作者头像 李华