gpt4 book ai didi

android - 在使用 Android NDK r10e 构建静态库时“无效使用 'auto'”

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:03 27 4
gpt4 key购买 nike

我正在为 android 构建一些 C++ 项目,以便在 unity 插件上使用它。我成功为 iOS 编译,但我在 android 上收到以下错误:

~/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_algo.h:3789:14: error: invalid use of 'auto'

~/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/include/future:114:11: error: declaration of 'class std::future<void>'
class future;

我正在使用 android-ndk-r10e 和这个 CMakeLists.txt 代码:

cmake_minimum_required(VERSION 2.8)
project(PluginAndroid)

# Android configuration
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 19) # API level
set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a)
set(CMAKE ANDROID_STL_TYPE stlport_static)
set(CMAKE_ANDROID_TOOLCHAIN_NAME arm-linux-androideabi-4.8)
set(CMAKE_CXX_STANDARD 11)


include_directories ("${PROJECT_SOURCE_DIR}/3rdParty/common/")
....

file(GLOB source_files
"*.h"
"*.cpp"
)

add_library(PluginAndroid STATIC ${source_files})

有解决这个问题的线索吗?

最佳答案

正如评论中指出的那样 CMAKE_CXX_STANDARD从 CMake 3.1 版开始可用(如果您使用的是 firefox,请参阅我的附加组件 here 以查看从哪个版本开始可以使用 cmake 功能),因此您应该更改所需的最低版本。

此外,您应该使用 CMAKE_CXX_STANDARD_REQUIRED 将标准标记为必需的.

最后,你应该使用 target_compile_features确保您的编译器支持 auto 关键字(gcc 4.9 不提供对 C++11 功能的完全支持)。

这是您的 CMake 文件的修改版本:

cmake_minimum_required(VERSION 3.1)
project(PluginAndroid)

# Android configuration
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 19) # API level
set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a)
set(CMAKE ANDROID_STL_TYPE stlport_static)
set(CMAKE_ANDROID_TOOLCHAIN_NAME arm-linux-androideabi-4.8)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include_directories ("${PROJECT_SOURCE_DIR}/3rdParty/common/")
....

file(GLOB source_files
"*.h"
"*.cpp"
)

add_library(PluginAndroid STATIC ${source_files})
target_compile_features(PluginAndroid PUBLIC cxx_auto_type)

无关,但请注意,documentation 中不推荐使用GLOB 来收集源文件:

We do not recommend using GLOB to collect a list of source files from your source tree. If no CMakeLists.txt file changes when a source is added or removed then the generated build system cannot know when to ask CMake to regenerate.

关于android - 在使用 Android NDK r10e 构建静态库时“无效使用 'auto'”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44775371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com