2017-06-27 16 views
2

1つのC++プロジェクトをAndroidプラグインで使用するためにビルドします。私は、iOS用にコンパイルするために成功したが、私はアンドロイドのために、次のエラーを取得:'AndroidのNDKを使ってスタティックライブラリを構築する際に' auto 'を無効にしましたr10e

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}) 

この問題を解決するために、任意の手がかり:私はandroid-ndk-r10eと、このCMakeLists.txtコードを使用してい

~/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; 

+0

'CMAKE_CXX_STANDARD'変数はCMake 3.1で導入されました。古いバージョンを使うとうまく動作しないので、 '-std = C++ 11'フラグを何か別の方法で追加する必要があります。 –

+0

また、使用しているGCCのバージョン(エラー出力のように見える4.9)は、完全なC++ 11をサポートしていないことにも注意してください。 –

+0

NDKでC++ 11を使うためにclangを使う方法はありますか? –

答えて

1

コメントで指摘されているようにCMAKE_CXX_STANDARDはCMakeのバージョン3.1以降で利用可能です(Firefoxを使用している場合は、hereのアドオンを参照してください)ので、最小限必要なバージョン。

また、必要に応じて標準をCMAKE_CXX_STANDARD_REQUIREDとマークする必要があります。

最終的には、コンパイラがautoキーワードをサポートするように、target_compile_featuresを使用する必要があります(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) 

無関係が、ソースファイルを収集するGLOBを使用してdocumentationで推奨されていないことに注意してください。

は行っておりませんGLOBを使用して、ソースツリーからソースファイルのリストを収集することをお勧めします。ソースが追加または削除されたときにCMakeLists.txtファイルが変更されない場合、生成されたビルドシステムはいつCMakeに再生成を要求するかを知ることができません。

+0

自動車の問題は修正されていますが、将来のクラスにはまだ問題があります。 –

+0

'' 'CMAKE_ANDROID_TOOLCHAIN_NAME'''はうまくいかないようです。その後、Clang 3.8または3.9を使用して解決することができますか? –

関連する問題