Android STL PORT

來源:互聯網
上載者:User

標籤:android   使用   檔案   string   問題   c++   

ndk中包含了stl對應的庫,在$(NKD_HOME)/sources/cxx-stl/stlport/stlport

有關Android NDK的C++ STL開發相關總結如下:

  1. 從Android NDK r5開始支援了STL Port,在這個版本開始就可以使用部分STL庫的功能了,比如說vector、map,string擺脫c下面容易出現的數組未初始化、越界,增強應用的健壯性。不包含相關的標頭檔就會報編譯錯誤!

  2. 很多網友包含了include 這樣頭,但仍然無法編譯,這裡你首先要檢查當前檔案是否為.cpp尾碼,同時為了使用標準庫必須加入 APP_STL := stlport_static 在Application.mk檔案中。相關對應還有 system 使用預設最小的C++運行庫,這樣產生的應用體積小,記憶體佔用小,但部分功能將無法支援 stlport_static 使用STLport作為靜態庫,這項是Android開發網極力推薦的 stlport_shared STLport 作為動態庫,這個可能產生相容性和部分低版本的Android韌體,目前不推薦使用。 gnustl_static 使用 GNU libstdc++ 作為靜態庫

  3. 預設情況下STLPORT是不支援C++異常處理和RTTI,所以不要出現 -fexceptions 或 -frtti ,如果真的需要可以使用gnustl_static來支援標準C++的特性,但產生的檔案體積會偏大,運行效率會低一些。 支援C++異常處理,在Application.mk中加入 LOCAL_CPPFLAGS += -fexceptions這句,同理支援RTTI,則加入LOCAL_CPPFLAGS += -frtti,這裡Android123再次提醒大家,第二條說的使用gnustl靜態庫,而不是stlport

  4. 強制重新編譯 STLPort ,在Application.mk中加入 STLPORT_FORCE_REBUILD := true 可以強制重新編譯STLPort源碼,由於一些原因可能自己需要修改下STLPort庫,一般普通的開發人員無需使用此項。

  5. Android目前目前已有更新的NDK版本,相關的學習可以查看NDK中的Samples整體和在PC上開發沒有太大的不同。

  6. 強烈建議做Android NDK開發的童鞋們根據自己的NDK版本,書寫application.mk的支援平台,因為你引用的stl庫的版本是基於你這個NDK版本的,如果你支援的平台下對stl的相容存在問題,產生的庫檔案就可能報載入不成功的錯誤,而且強烈建議不要使用stl的動態庫

  7. NDK r5b對gnustl和stlport的支援差異非常的大,切勿隨便混淆,不然你的程式表面編譯成功了,暗地了卻會給你帶來無窮的困擾!!!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.