You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下用Android NDK编译安卓项目,C++标准版本配置异常排查

解决Android NDK编译时std::stack::push_range未定义的问题

编译错误信息

D:\Projects\ProjectFoo\src\someFile.cpp:29:11: error: no member named 'push_range' in 'std::stack<TIntermNode *>'
    stack.push_range(analyzer.getPipelineOutputs());
    ~~~~~ ^
:\Projects\ProjectFoo\src\someFile.cpp:90:23: error: no member named 'push_range' in 'std::stack<TIntermNode *>'
                stack.push_range(Nodes);
                ~~~~~ ^

原因分析

  • std::stack::push_range是C23标准新增的成员函数,必须依赖完全支持C23的编译器和标准库才能使用。
  • 你当前使用的Android NDK 26.1.10909125内置Clang版本为17.0.2,该版本对C++23的支持不完整,std::stack::push_range特性需Clang 18及以上版本才正式支持。
  • 你指定的MinGW-w64 GCC 14.2.0虽支持C++23,但编译Android目标代码时,实际使用的是NDK内置的Clang编译器,本地MinGW仅作为make构建工具,因此本地GCC版本不影响安卓代码编译。

解决方案

方案1:升级Android NDK版本

  • 升级至NDK 27或更高版本,NDK 27内置Clang 18.1.0,完全支持std::stack::push_range等C++23特性。
  • 修改构建脚本中的ANDR_NDK_HOME路径为新NDK的安装路径即可。

方案2:强制传递C++23编译参数

即使不升级NDK,先确保CMake正确传递标准参数,避免编译器自动降级:
修改构建脚本中的CMake命令,补充以下参数:

C:\CMake\bin\cmake.exe -G "MinGW Makefiles" ..^
    -DCMAKE_MAKE_PROGRAM="%MINGW_MAKE_PATH%\mingw32-make.exe"^
    -DCMAKE_TOOLCHAIN_FILE="%ANDR_NDK_HOME%\build\cmake\android.toolchain.cmake"^
    -DCMAKE_BUILD_TYPE=Release^
    -DCMAKE_SYSTEM_NAME=Android^
    -DANDROID_ABI=arm64-v8a^
    -DCMAKE_CXX_STANDARD=23^
    -DCMAKE_CXX_STANDARD_REQUIRED=ON^
    -DCMAKE_CXX_EXTENSIONS=OFF^
    -DANDROID_STL=c++_static^

注意:若NDK 26的Clang仍不支持该特性,此方案可能无效,最终仍需升级NDK。

方案3:手动实现push_range功能

如果暂时无法升级NDK,可通过自定义函数替代std::stack::push_range,兼容旧版本编译器:
在代码中添加以下模板函数:

#include <iterator>

template <typename StackType, typename RangeType>
void push_range(StackType& stack, const RangeType& range) {
    using std::begin;
    using std::end;
    for (auto it = begin(range); it != end(range); ++it) {
        stack.push(*it);
    }
}

将原代码中的stack.push_range(...)替换为push_range(stack, ...)即可。

内容的提问来源于stack exchange,提问作者Fox1942

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 06:28:15