如何使用正确的 C++ 标准版本从 Windows 构建到 Android?

问题描述 投票:0回答:1

我正在尝试使用 Android NDK 和 MinGWg-w64 (winlibs-x86_64-posix-seh-gcc-14.2.0-llvm-18.1.8-mingw-w64ucrt-12.0.0-r1) 从 Windows 构建到 Android 一切都很顺利,直到出现这样的错误:

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);
                ~~~~~ ^

我猜这是因为push_range函数是在C++ 23标准之后才出现的。我将其包含在我的

CMakeLists.txt
以及我的构建脚本中,但它似乎已被忽略。还是编译器有问题?

这是我的构建脚本:

@echo off

    call :build arm64-v8a
    if errorlevel 1 goto error
    
    exit /b 0
    
    :build
    set ANDR_ARCH=%~1
    
    set ANDR_NDK_HOME=D:\Android\ndk\26.1.10909125
    set MINGW_MAKE_PATH=D:\winlibs-x86_64-posix-seh-gcc-14.2.0-llvm-18.1.8-mingw-w64ucrt-12.0.0-r1\mingw64\bin
    
    rd /s /q %ANDR_ARCH% > nul 2>&1
    
    mkdir %ANDR_ARCH%
    cd %ANDR_ARCH%
    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=26^
    pause
    
    if errorlevel 1 exit /b errorlevel
    C:\CMake\bin\cmake.exe --build . -j 12
    pause
    cd ..
    exit /b 0
    
    :error
    cd ..
    pause
    exit /b errorlevel
c++ cmake android-ndk mingw std
1个回答
0
投票

这与你的 MinGW 编译器无关,而是与你的 NDK 版本有关。

Android NDK 26.1 从 2023 年 1 月开始附带特定版本的 Clang 和 Libc++。同时,添加

std::stack::push_range
的提交已于 2023 年 6 月合并。

将 NDK 更新到 r27 或更高版本,该特定方法将成为 libc++ 的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.