
如何在Android平台下编译带STL的C++程序
2个回答
展开全部
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++程序的过程结束。
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++程序的过程结束。
2017-04-11 · 知道合伙人软件行家
关注

展开全部
从Android NDK R5版本开始已支持C++的STL开发了。使用NDK编译带STL的C++程序过程比较简单,简要过程说明如下:
http://blog.csdn.net/hcj116/article/details/19755123
http://blog.csdn.net/hcj116/article/details/19755123
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询