1. 程式人生 > >Android學習筆記——NDK中C++標準庫、STL的配置;Include其他標頭檔案

Android學習筆記——NDK中C++標準庫、STL的配置;Include其他標頭檔案

以下所有是基於Eclipse的,使用命令列的繞道。 

1、STL的使用,以stlport為例
官方的說法是隻需要在Application.mk檔案中新增如下一行即可
Application.mk程式碼  收藏程式碼
  1. APP_STL := stlport_static  

即可,可是如果真只是這麼做Eclipse中會提示找不到標頭檔案!!! 
還可以用GNU的標準庫,參見ndk/docs/APPLICATION-MK.html檔案中對APP_STL選項的說明。 

找不到標頭檔案的原因可能是Eclipse的程式碼提示功能在尋找標頭檔案時可能並不會識別Application.mk中的配置。於是乎,還需要在工程的property中設定一下標頭檔案所在路徑。 看到第二行那個萬惡的system路徑了吧,那個不支援stl等功能的預設C++庫的路徑。。。。




附上自己實際使用的Application.mk檔案
Application.mk程式碼  收藏程式碼
  1. APP_ABI := x86 #只生成x86架構的CPU用的lib,要生成所有平臺的可以改為all    
  2. #APP_STL := stlport_static  
  3. NDK_TOOLCHAIN_VERSION=4.7 #使用GCC4.7  
  4. APP_STL := gnustl_static #GNU STL  
  5. APP_CPPFLAGS := -fexceptions -frtti #允許異常功能,及執行時型別識別  
  6. APP_CPPFLAGS +=-std=c++11 #允許使用c++11的函式等功能  
  7. APP_CPPFLAGS +=-fpermissive  #此項有效時表示寬鬆的編譯形式,比如沒有用到的程式碼中有錯誤也可以通過編譯;使用GNU STL時不用此項std::string 居然編譯不通過!!  


2、新增其他標頭檔案
cpp檔案沒試。只是新增標頭檔案! 跟新增stl支援一樣,要在工程屬性新增標頭檔案路徑。不過上面那個不知道是不是隻是給IDE看的。。。google作的一致性還不夠啊。。。 
好吧,於是乎,還要在Android.mk中新增標頭檔案路徑,如:

Android.mk程式碼  收藏程式碼
  1. LOCAL_C_INCLUDES :=$(LOCAL_PATH) D:\cppHeaders\Include  

重新宣告下,需要改兩個地方: 
  • 1、在工程屬性新增標頭檔案路徑
  • 2、在Android.mk的LOCAL_C_INCLUDES項中新增標頭檔案路徑

3、編譯器抽風的時候。。。
原本明明編譯通過的程式碼又報錯。。。。果斷直接刪除obj資料夾下的檔案重新編譯。 

Good luck!!

轉載地址:http://cherishlc.iteye.com/blog/1758643