當前位置:編程學習大全網 - 源碼下載 - 如何在Android平臺下編譯帶STL的C++程序

如何在Android平臺下編譯帶STL的C++程序

1、下載最新的Android SDK,下載Android NDK R9C版本。

2、如是在windows平臺下需要在PATH中設置環境變量,以便於直接調用NDK來編譯C++程序。

將如下兩個路徑加入到PATH中:<ANDROID_NDK>;<ANDROID_SDK>\platform-tools

其中<NDK>為妳的計算機上Android NDK的安裝路徑,<SDK>為Android SDK的安裝路徑

如果在妳的SDK下沒有platform-tools目錄,則在Eclipse中按照如下截圖進行操作:

3、為要編譯的C++程序建壹個文件夾,如myproject。在myproject下再建壹個jni文件夾,將源代碼放在這個文件夾下,myproject/jni。

mkdir myproject

mkdir myproject/jni

4、在jni文件夾下建兩個分別名為:android.mk和

application.mk文件。android.mk類以於C++程序的makefile,application.mk則指明當前程序依賴的庫。

android.mk的示例為:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := my_first_app #指明C++程序編譯出的可執行程序的名稱

LOCAL_SRC_FILES:= my_first_app0.cpp \ #指明要編譯的源文件,可以有很多個

my_first_app1.cpp\

include$(BUILD_EXECUTABLE)#表明編譯的是可執行程序

/**************************************************************************/

application.mk的示例為:(在application.mk中指明STL庫)

APP_STL:= gnustl_static

這裏選STL庫時有四個選項:

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,這裏再次提醒大家,第二條說的使用gnustl靜態庫,而不是stlport。

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

5、打開控制臺(cmd),在myproject目錄下用android的NDK build工具編譯C++程序:

cd myproject

$NDK/ndk-build

如果程序沒錯的話,會編譯出android的可執行程序,位置在myproject/libs/armeabi/my_first_app

8、將編譯出來的my_first_app放到手機或是模擬器上運行。在windows的cmd上運行adb.exe。

用adb.exe將my_first_app程序push到手機或模擬器的/data/local目錄上:

adb.exepush myproject\libs\armeabi\my_first_app /data/local。

9、通過adb,在手機上運行my_frist_app:

在cmd上運行:

adb.exe shell

由此進入到手機的linux終端上,接下來再更改my_first_app的權限使其可以運行:

cd /data/local

chmod 777 my_first_app

./my_first_app//如果沒錯的話,這壹步即可運行my_first_app

至此在android上編譯含STL的C++程序的過程結束。

  • 上一篇:用記事本怎麽編輯、運行C語言?
  • 下一篇:小米商城源代碼分享
  • copyright 2024編程學習大全網