我正在为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})
解决此问题的任何线索?
答案 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重新生成。