2015-11-07 107 views
1

我試着在我的項目中使用std :: function,在這裏和那裏讀到C++ 11得到很好的支持。然而,簡單地使用std :: function會導致構建失敗:Android NDK和功能(std :: function)支持

[armeabi] Compile++ thumb: MyAppNative <= MyAppNative.cpp 
jni/MyAppNative.cpp: In function 'jint JNI_OnLoad(JavaVM*, void*)': 
jni/MyAppNative.cpp:7:2: error: 'function' is not a member of 'std' 
    std::function<void()> func; 
^
jni/MyAppNative.cpp:7:24: error: 'func' was not declared in this scope 
    std::function<void()> func; 
         ^
make: *** [obj/local/armeabi/objs/MyAppNative/MyAppNative.o] Error 1 

我的問題是:is std :: function應該被支持嗎?我已經看到它有條件地定義在標題中,具體取決於_STLP_USE_BOOST_SUPPORT。這是正常的嗎?如果有人對測試感興趣,我附上了一個示例項目。

http://www.filedropper.com/cpp11-functional-issue

乾杯

+0

您在構建時添加了-std = C++ 11'標誌嗎?哪個版本的GCC被使用? –

+0

請參閱http://developer.android.com/ndk/guides/cpp-support.html上的「如何設置您的運行時間」。 –

+0

是的,我確實添加了標誌(可以查看存檔),我認爲GCC版本是4.8(至少在更新到r10e進行測試之前)。 Christian>謝謝,但是std :: function在這裏沒有提及。我正在使用APP_STL:= stlport_static(在我的可下載示例中),並且沒有任何內容表示此版本已降級。 – Brunni

回答

1

您似乎正在使用的STLport從未擁有過C++ 11的支持。

請參閱developer.android.com/ndk/guides/cpp-support.html「如何設置您的運行時」並選擇另一個(gnustl_static或C++ _ static)。

+0

複製粘貼如何配置運行時而不是鏈接到外部大小會更好。像布魯尼那樣,他的回答幫助我快得多。 – mxmlnkn

+0

我Application.mk APP_OPTIM:=釋放 APP_PLATFORM:=機器人-14 APP_STL:= C++ _靜態 APP_CFLAGS + = -std = C++ 11 APP_CPPFLAGS + = -frtti APP_CPPFLAGS + = -fexceptions APP_CPPFLAGS + = -DANDROID APP_CPPFLAGS + = -std = GNU ++ 0x中 LOCAL_CPP_FEATURES + =異常 APP_ABI:=所有 APP_MODULES:= ndksampleapp NDK_TOOLCHAIN_VERSION:= 4.9,但仍然我得到錯誤 '的std ::功能' 尚未聲明 – AdiAtAnd

+0

它是否像stoi我將能夠通過C++ _靜態和通過gnustl_static函數,如果我用gnustl替換它正在爲stoi哭泣。我是新來的。對某些人來說,這聽起來很愚蠢或錯誤。請幫忙。 – AdiAtAnd

1

確定,所以感謝基督教和亞歷克斯,答案確實是改變你的Application.mk以便它引用gnustl_static。

APP_STL := gnustl_static 

謝謝大家!

+0

SO禮貌的不成文規則會建議你讓** [Christian Hackl](http://stackoverflow.com/users/3313064/christian-hackl)**將其評論發佈爲答案。 –

+0

是的,我還不習慣它,但它顯然感覺錯了:)現在,我將取消答案標記,並在Christian Hackl發佈此主題的答案時驗證它! – Brunni

+0

@Brunni:沒問題。我沒有意識到我的評論會真正幫助你,所以你會認爲它是一個答案:)現在我已經把它變成了一個真正的答案。 –