如何將C++ 11集成到Android中?在Android上啓用C++ 11支持
回答
首先,你需要確保你的工具鏈是「Cross GCC」。雖然這是我的Linux的默認設置,但它不在我的MacOSX Lion上。
爲此,請轉至項目屬性> C/C++ Build>工具鏈編輯器。 「當前工具鏈」應設置爲「Cross GCC」。您可能需要取消選中「顯示兼容工具鏈」框「。
然後,在Android.mk添加一個選項LOCAL_CFLAGS:
LOCAL_CFLAGS := -std=gnu++11
現在我們需要告知的Eclipse在哪裏可以找到相應的新符號(例如 「的std :: unordered_map」)。轉到右鍵點擊 「JNI」>屬性> C/C++常規 - >路徑和符號 - >符號 - > GNU C++,並添加以下符號(通過單擊 「添加...」):
Name: __GXX_EXPERIMENTAL_CXX0X__
Value:
(即讓「價值」空)
@ yakk:通常需要2天才能通過。 – moswald 2013-03-25 21:53:30
我遇到了一些問題。我使用Windows,並通過cmd進行編譯。我在make文件中添加了LOCAL_CFLAGS:= -D__GXX_EXPERIMENTAL_CXX0X__ -std = gnu ++ 11,但是當我運行ndk-build命令時,在使用unordered_map的地方出現錯誤('unordered_map'沒有命名類型)。代碼在我的程序的linux和windows端口中工作。任何想法可能是錯誤的?我使用的NDK是最新的(今天下載)。 – SMart 2013-03-31 10:18:41
如果您有多個模塊並且要爲所有文件啓用標誌,則可以將該標誌添加到Application.mk文件中的APP_CPPFLAGS變量中。 – hara 2013-10-15 12:35:15
看來主要答覆這裏包括C++ 11的實驗性支持,以及C++ 11是不是實驗了。
如果您使用命令行NDK支持(我使用IDEA社區版13作爲Java的東西),那麼這就是我必須在我的jni/Application.mk
中使用API 19(在OSX上獲得C++ 11支持ML):
NDK_TOOLCHAIN_VERSION := 4.8
# APP_STL := stlport_shared --> does not seem to contain C++11 features
APP_STL := gnustl_shared
# Enable c++11 extentions in source code
APP_CPPFLAGS += -std=c++11
這應該是公認的答案。 – stevebot 2015-03-18 19:24:36
您還可以,如果你使用的是gradle-experimental-plugin設置這個在您的的build.gradle文件:
android.ndk {
moduleName = "hello-android-jni"
stl = "stlport_shared"
cppFlags.add("-std=c++11")
}
這不起作用。它告訴我cppFlags找不到。 – Seth 2017-02-12 19:37:02
嘿@Seth,很多事情可能會出錯,你確定你已經使用了正確版本的gradle插件和正確版本的gradle本身嗎?如果你還沒有閱讀,這是一個很棒的公會。 http://tools.android.com/tech-docs/new-build-system/gradle-experimental – 2017-02-12 21:39:52
謝謝。但不幸的是,我已經閱讀了每一個指南。大聲笑。我只是用'pthread'而不是'thread' – Seth 2017-02-12 22:08:28
隨着最新gradle-experimental-plugin 0.8.0-的α4添加到您的應用/的build.gradle :
model {
android {
ndk {
moduleName "native"
CFlags.add("-std=c11") // Enable C11 support
ldLibs.add("log")
}
}
}
- 1. Android上的完整C++ 11支持
- 2. pahole C++ 11支持?
- 3. Android的NativeLibrary中的C++ 11支持
- 4. 使用MinGW或VS2012編譯器在Qt上啓用C++ 11支持
- 5. Qt要求C++ 11支持
- 6. Makefile的C++ 11的支持
- 7. 如何使用CMake在MinGW上激活C++ 11支持?
- 8. 在鐺線程支持++ 3.3 C++ 11
- 9. 在Clang中激活C++ 11支持
- 10. Emacs,cedet和C++/C++ 11支持
- 11. 同時支持C++ 98和C++ 11
- 12. Visual C++與C + + 11和線程支持
- 13. 在VSTS中啓用C#7支持
- 14. 在R上安裝軟件包,需要OSX支持C++ 11
- 15. 如何在Mac終端中使用C++ 11支持編譯C++
- 16. 檢查C++ 11對「正則表達式」的支持:不支持
- 17. 如何在DISQUS上啓用SSL支持?
- 18. GNU automake中的C++ 11支持
- 19. Qt Creator中的C++ 11 IDE支持?
- 20. 溼婆是否支持C++ 11標準?
- 21. Makefile修改以支持C++ 11
- 22. 如何檢查C++ 11支持?
- 23. 加入C++ 11支持的Makefile
- 24. Cython支持C++ 11容器嗎?
- 25. 繁瑣的ctags是否支持C++ 11?
- 26. 編譯OpenCV的3.3:C++ 11不支持
- 27. Emscripten C++ 11標準庫支持
- 28. 更改C++ 11支持的boost.build jamfile?
- 29. C++的LLVM和Clang支持11
- 30. 此文件需要C++ 11庫支持
有沒有必要創建一個新的問題,只需回答你的原始問題。 – LittleBobbyTables 2013-03-25 13:41:41
由於原來的問題是關於使用「unordered_map」,我相信在Android上集成C++ 11會有趣,因爲這花了我一些時間,而且略有不同。很高興在維基問題上得到贊成票,順便說一下;-)。 – JonesV 2013-03-25 13:45:07
gotcha。猜猜有人不喜歡這個問題:| – LittleBobbyTables 2013-03-25 13:46:42