標籤:android 使用 檔案 string 問題 c++
ndk中包含了stl對應的庫,在$(NKD_HOME)/sources/cxx-stl/stlport/stlport
有關Android NDK的C++ STL開發相關總結如下:
從Android NDK r5開始支援了STL Port,在這個版本開始就可以使用部分STL庫的功能了,比如說vector、map,string擺脫c下面容易出現的數組未初始化、越界,增強應用的健壯性。不包含相關的標頭檔就會報編譯錯誤!
很多網友包含了include 這樣頭,但仍然無法編譯,這裡你首先要檢查當前檔案是否為.cpp尾碼,同時為了使用標準庫必須加入 APP_STL := stlport_static 在Application.mk檔案中。相關對應還有 system 使用預設最小的C++運行庫,這樣產生的應用體積小,記憶體佔用小,但部分功能將無法支援 stlport_static 使用STLport作為靜態庫,這項是Android開發網極力推薦的 stlport_shared STLport 作為動態庫,這個可能產生相容性和部分低版本的Android韌體,目前不推薦使用。 gnustl_static 使用 GNU libstdc++ 作為靜態庫
預設情況下STLPORT是不支援C++異常處理和RTTI,所以不要出現 -fexceptions 或 -frtti ,如果真的需要可以使用gnustl_static來支援標準C++的特性,但產生的檔案體積會偏大,運行效率會低一些。 支援C++異常處理,在Application.mk中加入 LOCAL_CPPFLAGS += -fexceptions這句,同理支援RTTI,則加入LOCAL_CPPFLAGS += -frtti,這裡Android123再次提醒大家,第二條說的使用gnustl靜態庫,而不是stlport
強制重新編譯 STLPort ,在Application.mk中加入 STLPORT_FORCE_REBUILD := true 可以強制重新編譯STLPort源碼,由於一些原因可能自己需要修改下STLPort庫,一般普通的開發人員無需使用此項。
Android目前目前已有更新的NDK版本,相關的學習可以查看NDK中的Samples整體和在PC上開發沒有太大的不同。
強烈建議做Android NDK開發的童鞋們根據自己的NDK版本,書寫application.mk的支援平台,因為你引用的stl庫的版本是基於你這個NDK版本的,如果你支援的平台下對stl的相容存在問題,產生的庫檔案就可能報載入不成功的錯誤,而且強烈建議不要使用stl的動態庫
NDK r5b對gnustl和stlport的支援差異非常的大,切勿隨便混淆,不然你的程式表面編譯成功了,暗地了卻會給你帶來無窮的困擾!!!