'使用Android NDK r10e构建静态库时无效使用'auto''

时间:2017-06-27 08:18:54

标签: android c++ c++11 android-ndk cmake

我正在为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})

解决此问题的任何线索?

1 个答案:

答案 0 :(得分:1)

正如评论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来收集源文件:

  

我们不建议使用GLOB从源树中收集源文件列表。如果在添加或删除源时没有更改CMakeLists.txt文件,则生成的构建系统无法知道何时要求CMake重新生成。

相关问题